⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buttonblockmove.java

📁 java程序设计源代码
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
class ButtonBlockMove extends Applet
{
	final int RC = 4;	// 行列数
	final int N = RC*RC;	// 块的个数
	int []num = new int[N];   //数组num用于记录每个按钮上的数字-1
	Button [] btn = new Button[N];
	Button btnStart = new Button("开始游戏");

	public void init(){ //程序开始,对数组赋值,并显示按钮文字
		setLayout( new BorderLayout() );
		Panel p1 = new Panel();
		Panel p2 = new Panel();
		p1.setLayout( new GridLayout( RC, RC ));
		p2.add( btnStart );
		add(p1);
		add(p2, BorderLayout.SOUTH );

		for( int i=0; i<N; i++ ){
			num[i] = i;
			btn[i] = new Button(""+ ( num[i] + 1 ));
			p1.add(btn[i]);
			btn[i].setVisible( true );
		}
		btn[N-1].setVisible( false ); //数字为N-1的按钮不显示

		btnStart.addActionListener( new ActionListener(){
			public void actionPerformed( ActionEvent e){
				btnStart_Click();
			}
		});
		for( int i=0; i<N; i++ ){
			btn[i].addActionListener( new ActionListener(){
				public void actionPerformed( ActionEvent e){
					for( int j=0; j<N; j++ )
						if( (Button)e.getSource() == btn[j] )
							btn_Click(j);
				}
			});
		}
	}

	public void btnStart_Click(){
		//打乱顺序,开始游戏
		int i,j,k,t;    
		for( i = 1; i<500; i++){ 
			j = (int)(Math.random()* N);  //随机找两个下标,交换其对应的数组元素
			k = (int)(Math.random()* N);
			t = num[j]; num[j] = num[k]; num[k] = t;
		}
		
		for( i=0; i<N; i++ ){//显示它们
			btn[i].setLabel(""+ (num[i] + 1));
			btn[i].setVisible( true );
		}
		i = findBlank();       //其中有一个按钮需要隐藏
		btn[i].setVisible(false);
	}

	int findBlank(){  //函数: 找到哪一个为空位
		int i;
		for( i=0; i<N; i++ ){        //遍试
			if( num[i] == N-1 ) break; //找到值为N-1的这个元素
		}
		return i;         //函数返回值为找到的下标
	}

	void btn_Click(int index){  //第Index个按钮的事件处理
		int blank, t;
		blank = findBlank();                    //找到空白按钮(隐藏的)
		if( isNeighbor(blank, index)){       //如果相邻
			btn[index].setVisible( false );         //一个隐藏,一个显示
			btn[blank].setVisible( true );          //并交换其上的数字
			t = num[blank]; num[blank] = num[index]; num[index] = t;
			btn[blank].setLabel( ""+ (num[blank] + 1));
			btn[index].setLabel( ""+ (num[index] + 1));
		}
		checkResult();                       //调用过程,检查是否完成
	}

	boolean isNeighbor(int a, int b){  //判断是否相邻
		boolean r; //请注意其中的算术运算/关系运算/逻辑运算
		r = false;
		if( a == b - RC || a == b + RC ) r = true;  //上下相邻
		if( (a == b - 1 || a == b + 1) && a / RC == b / RC ) r = true; //左右相邻,注意要在同一排
		return r;
	}

	void checkResult(){  //检查结果
		int i;
		for( i=0; i<N; i++ ){     //检查每个数据
			if( num[i] != i ) return;  //如果尚未完全到位,退出该子程序
		}
		new Dialog(new Frame(), "你赢了!请点击 [开始] 再来一次.",true).show();
	}

	public static void main(String args[]) {
		Frame f = new Frame("排块游戏");
		Applet p = new ButtonBlockMove();
		p.init();
		p.start();
		f.add(p);
		f.setSize(300, 300);
		f.addWindowListener( new WindowAdapter(){
			public void windowClosing(WindowEvent e){ System.exit(0);}
		});
		f.show();
    }
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -