拼图游戏java(三)实现鼠标点击图片上下左右移动

思路:

1.使类实现MouseLisner接口,创建未重写的方法,主要重写MousePressed方法

2.在按钮上添加鼠标监听

3.在方法中实现业务逻辑

 

 

1

public class GamePanel extends JPanel implements MouseListener

还需继承JPanel类

2.

for(int i = 0;i<btns.length;i++){
            btns[i] = new JButton(icons[order[i]]);//创建按钮时指定图片
            btns[i].addMouseListener(this);//在按钮上添加鼠标监听  this表示当前对象  用当前对象监听器 
            add(btns[i]);

        }

3.

思路

1.获取鼠标点击的具体按钮

2.根据按钮的位置及空白图片按钮的位置确定是否可以移动

3.判断是否拼图成功

    public void mousePressed(MouseEvent e) {
                //1.得到单击按钮的下标值k
                int k = 0;//赋值0是为了能过语法检查,实际上在运行中k的值肯定会被覆盖
                for(int i = 0;i<btns.length;i++){
                    if(e.getSource()==btns[i]){
                        k=i;
                        break;//得到值后立马跳出
                    }
                }
//                System.out.println("单击按钮下标"+k);
                //2.检测移动方向并处理
                //btns[k-n]是btns[k]的上一行按钮
                if(k>=n&&btns[k-n].getIcon()==null){//能够向上
                    btns[k-n].setIcon(btns[k].getIcon());
                    btns[k].setIcon(null);            
                }else if(k<n*(n-1)&&btns[k+n].getIcon()==null){//向下
                    btns[k+n].setIcon(btns[k].getIcon());
                    btns[k].setIcon(null);
                }else if(k%n!=n-1&&btns[k+1].getIcon()==null){//向右
                    btns[k+1].setIcon(btns[k].getIcon());
                    btns[k].setIcon(null);
                }else if(k%n!=0&&btns[k-1].getIcon()==null){//左
                    btns[k-1].setIcon(btns[k].getIcon());
                    btns[k].setIcon(null);
                }
                //3.判断是否成功
                if(isSuccess()){
                    JOptionPane.showMessageDialog(null, "success!");//弹出
                    
                }
        
    }

    private boolean isSuccess() {
        boolean flag=true;
        for(int i = 0;i<btns.length;i++){
            if(btns[i].getIcon()!=icons[i]){//若发现图片顺序未对应
                flag=false;
                break;
            }
        }
        return flag;
        
        
    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值