拼图小游戏--游戏界面代码

拼图小游戏,通过上下左右键或者awds键实现拼图的移动,以完成拼图。

其中包含更换图片,重新开始,退出登录,关闭界面,还有关于我们等功能,有Q键查看最终效果,R键一键通关的特殊按键功能。

package hello.third.game;

import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;

public class GameJFrame extends JFrame implements KeyListener, ActionListener {
    int[] a = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
    int jj[][] = new int[4][4];
    int ii[][] = {
            {1,2,3,4},
            {5,6,7,8},
            {9,10,11,12},
            {13,14,15,0},
    };

    int step=0;
    int x;
    int y;
    String path = "..\\July\\image\\girl\\girl3\\";

    //按钮条目是声明
    JMenuItem replayItem = new JMenuItem("重新开始");
    JMenuItem reLoginItem = new JMenuItem("重新登陆");
    JMenuItem closeItem = new JMenuItem("关闭游戏");
    JMenuItem accountItem = new JMenuItem("公众号");
    JMenuItem animalItem = new JMenuItem("动物");
    JMenuItem girlItem = new JMenuItem("美女");
    JMenuItem sportItem = new JMenuItem("运动");

    public GameJFrame() {
        //初始化页面
        initJFrame();
        //初始化菜单
        initJMenuBar();
        //初始化数组
        initArray();
        //初始化图片
        initImage();


        //设置页面可见,建议写在最后
        this.setVisible(true);
    }
    private void initArray() {
        /*Random c = new Random();
        int b = c.nextInt(15)+5;*/
        for (int i = 0; i < 15; i++) {
            Random random = new Random();
            int b = random.nextInt(16);
            int temp = a[i];
            a[i] = a[b];
            a[b] = temp;
        }
        for (int i = 0; i < a.length; i++) {
            if (a[i]==0){
                x=i/4;
                y=i%4;

            }
            jj[i/4][i%4] = a[i];

        }
    }


    private void initImage() {
        this.getContentPane().removeAll();
        JLabel stepNum = new JLabel("stepNum: "+step);
        stepNum.setBounds(20,20,150,60);
        this.getContentPane().add(stepNum);
        //清除原本的图片


        if (winOrNo()){
            ImageIcon backGround = new ImageIcon("..\\July\\image\\win.png");
            JLabel jLabel = new JLabel(backGround);
            jLabel.setBounds(203, 283, 200, 100);
            this.getContentPane().add(jLabel);
        }
        image();
    }

    private void initJMenuBar() {
        //设置菜单内的单独选项和条目  JMenuBar>JMenu>JMenuItem
        JMenuBar jMenuBar = new JMenuBar();
        JMenu functionJMenu = new JMenu("功能");
        JMenu aboutJMenu = new JMenu("关于我们");
        JMenu exchangePhoto = new JMenu("更换图片");

        functionJMenu.add(exchangePhoto);
        //把JMenuItem条目放在JMenu选择中
        functionJMenu.add(replayItem);
        functionJMenu.add(reLoginItem);
        functionJMenu.add(closeItem);
        exchangePhoto.add(animalItem);
        exchangePhoto.add(girlItem);
        exchangePhoto.add(sportItem);
        aboutJMenu.add(accountItem);

        //添加动作监听
        reLoginItem.addActionListener(this);
        replayItem.addActionListener(this);
        closeItem.addActionListener(this);
        accountItem.addActionListener(this);
        girlItem.addActionListener(this);
        animalItem.addActionListener(this);
        sportItem.addActionListener(this);
        //把JMenu选项放在JMenuBar菜单中
        jMenuBar.add(functionJMenu);
        jMenuBar.add(aboutJMenu);

        //给页面设置菜单
        this.setJMenuBar(jMenuBar);
    }//功能按钮的初始化
    private void initJFrame() {
        //设置页面大小
        this.setSize(603, 680);
        //设置页面一直存在
        this.setAlwaysOnTop(true);
        //设置title标题
        this.setTitle("单机版 v1.0");
        //设置居中
        this.setLocationRelativeTo(null);
        //设置关闭模式
        this.setDefaultCloseOperation(3);
        //取消页面的默认布局
        this.setLayout(null);

        this.addKeyListener(this);
    }//整体页面的初始化

    @Override
    public void keyTyped(KeyEvent e) {

    }
    public void image(){
        for (int i = 0; i < ii.length; i++) {
            for (int j = 0; j < ii.length; j++) {
                ImageIcon imageIcon = new ImageIcon(path+(jj[i][j])+".jpg");
                JLabel jLabel = new JLabel(imageIcon);
                //设置JLabel的位置
                jLabel.setBounds(j * 105 + 92, i * 105 + 134, 105, 105);
                jLabel.setBorder(new BevelBorder(0));//对斜角边框的设置
                //把容器添加到页面
                this.getContentPane().add(jLabel);
            }
        }
        ImageIcon backGround = new ImageIcon("..\\July\\image\\background.png");
        JLabel jLabel = new JLabel(backGround);
        jLabel.setBounds(40, 40, 508, 560);
        this.getContentPane().add(jLabel);



        this.getContentPane().repaint();
    }//按照jj数组去打印图片

    @Override
    public void keyPressed(KeyEvent e) {
        int code = e.getKeyCode();
        if(code==81){
            this.getContentPane().removeAll();
            ImageIcon imageIcon = new ImageIcon(path+"all.jpg");
            JLabel jLabel = new JLabel(imageIcon);
            //设置JLabel的位置
            jLabel.setBounds(83, 134, 420, 420);
            jLabel.setBorder(new BevelBorder(0));
            //把容器添加到页面
            this.getContentPane().add(jLabel);

            ImageIcon backGround = new ImageIcon("..\\July\\image\\background.png");
            JLabel jLabel1 = new JLabel(backGround);
            jLabel1.setBounds(40, 40, 508, 560);
            this.getContentPane().add(jLabel1);

            this.getContentPane().repaint();

        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
        if(winOrNo()){
            return;
        }
        int code = e.getKeyCode();
        if(code==37 || code==65){
            if(y>0){
                jj[x][y]=jj[x][y-1];
                jj[x][y-1]=0;
                y--;
                step++;
                initImage();

            }else return;
        }else if(code==38 || code==87){
            if(x>0){
                jj[x][y]=jj[x-1][y];
                jj[x-1][y]=0;
                x--;
                step++;
                initImage();
            }else return;
        }else if(code==39 || code==68){
            if(y<3){
                jj[x][y]=jj[x][y+1];
                jj[x][y+1]=0;
                y++;
                step++;
                initImage();
            }else return;
        }else if(code==40 || code==83){
        if(x<3){
            jj[x][y]=jj[x+1][y];
            jj[x+1][y]=0;
            x++;
            step++;
            initImage();
            }else return;
        }else if(code == 81) {
            initImage();
        }
        else if(code==82) {
            jj=new int [][]{
                    {1,2,3,4},
                    {5,6,7,8},
                    {9,10,11,12},
                    {13,14,15,0},
            };
            winOrNo();
            initImage();
        }
    }

    public Boolean winOrNo(){

        for (int i = 0; i < ii.length; i++) {
            for (int j = 0; j < ii.length; j++) {
                if (jj[i][j]!=ii[i][j]){
                    return false;
                }
            }
        }
        return true;
    }


    @Override
    public void actionPerformed(ActionEvent e) {
        Object ob = e.getSource();
        if(ob==replayItem){
            initArray();
            step=0;
            initImage();

        }if(ob==reLoginItem){
            this.setVisible(false);
            new LoginJFrame();
        } else if (ob==closeItem) {
            System.exit(0);
        } else if (ob==accountItem) {
            JDialog jDialog = new JDialog();
            JLabel jLabel = new JLabel(new ImageIcon("F:\\holiday java code\\July\\image\\about.png"));
            jDialog.getContentPane().add(jLabel);
            jDialog.setSize(300,300);
            jLabel.setBounds(0,0,258,258);
            jDialog.setAlwaysOnTop(true);
            jDialog.setLocationRelativeTo(null);
            jDialog.setModal(true);
            jDialog.setVisible(true);
        } else if (ob==girlItem) {
            Random g = new Random();
            System.out.println(g.nextInt(12)+1);
            path = "..\\July\\image\\girl\\girl"+(g.nextInt(12)+1)+"\\";
            initArray();
            step=0;
            initImage();
        } else if (ob==animalItem) {
            Random a = new Random();
            System.out.println(a.nextInt(7)+1);
            path = "..\\July\\image\\animal\\animal"+(a.nextInt(7)+1)+"\\";
            initArray();
            step=0;
            initImage();
        } else if (ob==sportItem) {
            Random s = new Random();
            System.out.println(s.nextInt(9)+1);
            path = "..\\July\\image\\sport\\sport"+(s.nextInt(9)+1)+"\\";
            initArray();
            step=0;
            initImage();
        }
    }
}

在test类中直接调用

new GameJFrame();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值