拼图游戏(下)
Java之路2022/10/13
阶段小项目(下)
美化界面
-
将十五张图片移动到界面的中央偏下方
jLabel.setBounds(105* j+83,105*i+134,105,105);
-
添加背景图片
//添加背景图片 JLabel background=new JLabel(new ImageIcon("Jigsawgame\\素材\\image\\background.png")); background.setBounds(40,40,508,560); //把背景图片添加到界面中 this.getContentPane().add(background);
-
添加图片的边框
jLabel.setBorder(new BevelBorder(0));
移动图片
-
本类实现KeyListner接口,并重写所有抽象方法
public class GameJFrame extends JFrame implements KeyListener
-
给整个界面添加键盘监听事件
-
统计一下空白方块对应的数字0在二维数组中的位置
-
//将一维数组进行遍历,然后一个一个存入 for (int i = 0; i < tempArr.length; i++) { //找到0索引在二维数组的为位置 if (tempArr[i]==0){ x=i/4; y=i%4; } else{ data[i/4][i%4]=tempArr[i]; } }
-
在keyReleased方法中实现移动的逻辑
bug修复:
当出现越界异常的时候处理方法
@Override
public void keyReleased(KeyEvent e) {
//对上,下,左,右进行判断
//左37 上38 右39 下40
int code=e.getKeyCode();
if (code==37){
System.out.println("向左移动");
//越界判断
if (y==3){
//代表右面已经没有图片了
return;
}
//移动逻辑
//x y 代表空白方块
data[x][y]=data[x][y+1];
data[x][y+1]=0;
y++;
//调用方法按照最新的数字加载图片
initImage();
}
else if (code==38){
System.out.println("向上移动");
//越界判断
if (x==3){
//代表下面已经没有图片了
return;
}
//移动逻辑
//x y 代表空白方块
data[x][y]=data[x+1][y];
data[x+1][y]=0;
x++;
//调用方法按照最新的数字加载图片
initImage();
}
else if (code==39){
System.out.println("向右移动");
//越界判断
if (y==0){
//代表左面已经没有图片了
return;
}
//移动逻辑
//x y 代表空白方块
data[x][y]=data[x][y-1];
data[x][y-1]=0;
y--;
//调用方法按照最新的数字加载图片
initImage();
}
else if (code==40){
System.out.println("向下移动");
//越界判断
if (x==0){
//代表上面已经没有图片了
return;
}
//移动逻辑
//x y 代表空白方块
data[x][y]=data[x-1][y];
data[x-1][y]=0;
x--;
//调用方法按照最新的数字加载图片
initImage();
}
}
}
由于代码有删删改改,或者各种的位置修改,就干脆直接分享源码了
链接:https://pan.baidu.com/s/1L2jVmJ1lIjwa0wOODUtkdA
提取码:jfl2
--来自百度网盘超级会员V3的分享