拼图游戏(下)

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

移动图片

  1. 本类实现KeyListner接口,并重写所有抽象方法

    public class GameJFrame extends JFrame implements KeyListener
    
  2. 给整个界面添加键盘监听事件

  3. 统计一下空白方块对应的数字0在二维数组中的位置

  4. //将一维数组进行遍历,然后一个一个存入
    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];
        }
    }
    
  5. 在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的分享

posted @ 2022-11-09 14:22  喜欢七岁就很浪  阅读(16)  评论(0编辑  收藏  举报