移动图片
分析:
1.本类实现KeyListener接口, 并重写所有抽象方法
2.给整个界面添加键盘监听事件
3.统计一下空白方块对应的数字0在二维数组中的位置
4.在keyReleased方 法当中实现移动的逻辑
5. Bug修复:
当空白方块在最下方时,无法再次进行上移
当空白方块在最上方时, 无法再次进行下移
当空白方块做最左侧时,无法再次进行右移
当空白方块做最右侧时,无法再次进行左移
public class GameJFrame extends JFrame implements KeyListener{ //实现一个键盘监听
int [][]arr=new int[4][4];//二维数组,用来管理数据
//记录空白方块在图片的位置
int x=0;
int y=0;
private void Image() { //添加图片,添加图片时需要按照二维数组的打乱数据来添加
//清空原本已经出现的图片
this.getContentPane().removeAll();
for(int i=0;i<4;i++) {
for(int j=0;j<4;j++) {
int number=arr[i][j];
JLabel jLabel = new JLabel(new ImageIcon("E:/javaspace/tuxing/image/animal/animal3/"+number+".jpg"));
jLabel.setBounds(105 * j+83, 105 * i+134,105,105);
//给图片添加边框
jLabel.setBorder(new BevelBorder(BevelBorder.LOWERED));
this.getContentPane().add(jLabel);
}
}
//添加背景图片,先加载的图片在上方,后加载的图片在下方
JLabel backgroud =new JLabel(new ImageIcon("E:/javaspace/tuxing/image/background.png"));
backgroud.setBounds(40, 40, 508,560);
this.getContentPane().add(backgroud);
//刷新界面
this.getContentPane().repaint();
}
private void initate() {
//设置界面的宽高
this.setSize(603,680);
//设置界面标题
this.setTitle("拼图小游戏");
//设置界面置顶
this.setAlwaysOnTop(true);
//设置界面居中
this.setLocationRelativeTo(null);
//设置关闭模式
this.setDefaultCloseOperation(3);
//取消默认的居中放置,只有取消了XY轴才有用
this.setLayout(null);
//给整个界面添加键盘监听事件
this.addKeyListener(this);//执行本类里面的方法
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e) {
// 对上下左右进行判断
int code=e.getKeyCode();
System.out.println(code);
if(code==37) {
if(y==3) {
return;
}
System.out.println("向左移动");//把空格右边图片向左移
arr[x][y]=arr[x][y+1];
arr[x][y+1]=0;
y++;
Image();
}else if(code==38) {
if(x==3) {
return;
}
System.out.println("向上移动");//图片向上移动而不是空格
arr[x][y]=arr[x+1][y];
arr[x+1][y]=0;
x++;
Image();
}else if(code==39) {
if(y==0) {
return;
}
System.out.println("向右移动");//把空格左边图片向右移
arr[x][y]=arr[x][y-1];
arr[x][y-1]=0;
y--;
Image();
}else if(code==40) {
if(x==0) {
return;
}
System.out.println("向下移动");
arr[x][y]=arr[x-1][y];
arr[x-1][y]=0;
x--;
Image();
}
}
}