1.概述
大一时用Java写的一个拼图游戏,主要是对Swing组件的应用,使用了JFrame,JPanel,JButton等组件,对于学习Swing有一定的帮助。
2.界面截图
3.核心代码
//获取到当前所点击的小方格163*152
Cell button =(Cell)e.getSource();
//获取所点击方格的X,Y坐标
int clickX = button.getBounds().x;
int clickY = button.getBounds().y;
//获取当前空方格的X,Y坐标
int nullX = nullCell.getBounds().x;
int nullY = nullCell.getBounds().y;
//进行比较,如果满足条件进行位置的交换
if(clickX == nullX && clickY - nullY == 152){//点击的为空方格下面的方格
button.move("UP");//所点击的方格向上移动
} else if(clickX == nullX && clickY - nullY == -152){
button.move("DOWN");//所点击的方格向上移动
} else if(clickY == nullY && clickX -nullX == 163){
button.move("LEFT");
} else if(clickY == nullY && clickX -nullX == -163){
button.move("RIGHT");
} else{
return ;
}
//更新空方格的位置
nullCell.setLocation(clickX, clickY);
//拼图区界面重新绘制
this.repaint();
//更新步数,将游戏状态区的步数更新
stepNum++;
PictureMainFrame.step.setText("步数:"+stepNum);
//判断当前游戏是否完成,若完成,给玩家一个友好的提示
if(this.isFinish()){
//弹出一个窗口提示
JOptionPane.showMessageDialog(this, "恭喜你完成拼图!!!\n所用步"+ stepNum);
//撤销每一个小方格上的鼠标点击监听,让鼠标点击小方格不再起作用
for(int i=0;i<11;i++){
cell[i].removeMouseListener(this);
}
//更新方格的动作监听器的状态
hasAddActionListener = false;
}
}
//判断当前游戏是否完成,根据坐标判断拼图是否完成
private boolean isFinish(){
for(int i=0 ;i<11; i++){
//获取每一个方格的位置
int x = cell[i].getBounds().x;
int y = cell[i].getBounds().y;
if((y-20)/152*3+(x/163)!=i){
return false;
}
}