java图形化(5)

移动图片

分析:

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();
		}
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值