Java实现拼图小游戏

1) 效果2)代码实现与资源文件

图片文件: https://pan.baidu.com/s/1Z3jV41aBWJjprBGAgOeeTw?pwd=euqx

package threadEarth;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

class Win_Sky extends JFrame{
    private int [][] datas = {
                {1,2,3,4},
                {5,6,7,8},
                {9,10,11,12},
                {13,14,15,0}
        };
    private int x0;
    private int y0;
    private JButton btn2 = new JButton(new ImageIcon("D:\\Ddisk\\UnitCode\\Java\\Sky\\Images\\shang.png"));
    private JButton btn3 = new JButton(new ImageIcon("D:\\Ddisk\\UnitCode\\Java\\Sky\\Images\\zuo.png"));
    private JButton btn4 = new JButton(new ImageIcon("D:\\Ddisk\\UnitCode\\Java\\Sky\\Images\\xia.png"));
    private JButton btn5 = new JButton(new ImageIcon("D:\\Ddisk\\UnitCode\\Java\\Sky\\Images\\you.png"));
    private JButton btn6 = new JButton(new ImageIcon("D:\\Ddisk\\UnitCode\\Java\\Sky\\Images\\qiuzhu.png"));
    private JButton btn7 = new JButton(new ImageIcon("D:\\Ddisk\\UnitCode\\Java\\Sky\\Images\\chongzhi.png"));
    JPanel imagePanel;

    Win_Sky(){
        initFrame();
        randomData();
        paintView();
        addButtonEvent();
        super.setVisible(true);
    }
    public void rePaintView(){
        imagePanel.removeAll();
        for (int i = 0; i < datas.length; i++) {
            for (int j = 0; j < datas[i].length; j++) {
                JLabel imageLabel = new JLabel(new ImageIcon("D:\\Ddisk\\UnitCode\\Java\\Sky\\Images\\"+datas[i][j]
                +".png"));
                imageLabel.setBounds(j*90,i*90,90,90);
                imagePanel.add(imageLabel);
            }
        }
        imagePanel.repaint();
    }

    public void addButtonEvent(){
        btn2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if(x0==3 || x0==-1 || y0==-1){return;}
                datas[x0][y0]=datas[x0+1][y0];
                datas[x0+1][y0]=0;
                x0=x0+1;
                rePaintView();
            }
        });
        btn3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if(y0==3 || x0==-1 || y0==-1){return;}
                datas[x0][y0]=datas[x0][y0+1];
                datas[x0][y0+1]=0;
                y0=y0+1;
                rePaintView();
            }
        });
        btn4.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if(x0==0 || x0==-1 || y0==-1){return;}
                datas[x0][y0]=datas[x0-1][y0];
                datas[x0-1][y0]=0;
                x0=x0-1;
                rePaintView();
            }
        });
        btn5.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if(y0==0 || x0==-1 || y0==-1){return;}
                datas[x0][y0]=datas[x0][y0-1];
                datas[x0][y0-1]=0;
                y0=y0-1;
                rePaintView();
            }
        });
        btn6.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int num=1;
                for (int i = 0; i < datas.length; i++) {
                    for (int j = 0; j < datas[i].length; j++) {
                        datas[i][j]=num++;
                    }
                }
                x0=y0=-1;
                rePaintView();
            }
        });
        btn7.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if(x0==-1 || y0==-1){
                    layer1:for (int i = 0; i < datas.length; i++) {
                        for (int j = 0; j < datas[i].length; j++) {
                            if(datas[i][j]==16){
                                datas[i][j]=0;
                                break layer1;
                            }
                        }
                    }
                }
                randomData();
                rePaintView();
            }
        });
    }

    public void randomData(){
        Random r = new Random();
        for (int i = 0; i < datas.length; i++) {
            for (int j = 0; j < datas[i].length; j++) {
                int x = r.nextInt(datas.length);
                int y = r.nextInt(datas[i].length);
                int temp = datas[i][j];
                datas[i][j]=datas[x][y];
                datas[x][y]=temp;
            }
        }
        //记录0号图片的位置
        layer1:for (int i = 0; i < datas.length; i++) {
            for (int j = 0; j < datas[i].length; j++) {
                if(datas[i][j]==0){
                    x0=i;
                    y0=j;
                    break layer1;
                }
            }
        }
    }

    public void paintView() {

        btn2.setBounds(732,265,57,57);
        btn3.setBounds(650,347,57,57);
        btn4.setBounds(732,347,57,57);
        btn5.setBounds(813,347,57,57);
        btn6.setBounds(626,444,108,45);
        btn7.setBounds(786,444,108,45);


        JLabel jLabel4 = new JLabel(new ImageIcon("D:\\Ddisk\\UnitCode\\Java\\Sky\\Images\\title.png"));
        JLabel jLabel5 = new JLabel(new ImageIcon("D:\\Ddisk\\UnitCode\\Java\\Sky\\Images\\canzhaotu.png"));
        JLabel jLabel6 = new JLabel(new ImageIcon("D:\\Ddisk\\UnitCode\\Java\\Sky\\Images\\background.png"));
        jLabel4.setBounds(354,27,232,57);
        jLabel5.setBounds(574,114,122,121);
        jLabel6.setBounds(0,0,960,530);


        imagePanel = new JPanel();
        imagePanel.setBounds(150,114,360,360);
        imagePanel.setLayout(null);
        for (int i = 0; i < datas.length; i++) {
            for (int j = 0; j < datas[i].length; j++) {
                JLabel imageLabel = new JLabel(new ImageIcon("D:\\Ddisk\\UnitCode\\Java\\Sky\\Images\\"+datas[i][j]
                +".png"));
                imageLabel.setBounds(j*90,i*90,90,90);
                imagePanel.add(imageLabel);
            }
        }

        super.add(imagePanel);
        super.add(jLabel4);
        super.add(jLabel5);
        super.add(btn2);
        super.add(btn3);
        super.add(btn4);
        super.add(btn5);
        super.add(btn6);
        super.add(btn7);
        super.add(jLabel6);


    }

    public void initFrame() {
        super.setTitle("拼图");
        super.setSize(960,565);
        super.setLocationRelativeTo(null);
        super.setDefaultCloseOperation(3);
        super.setLayout(null);
    }
}
public class mainn{
    public static void main(String[] args){
        Win_Sky sky = new Win_Sky();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值