首页 > 编程语言 >JAVA石头迷阵游戏

JAVA石头迷阵游戏

时间:2023-06-30 23:38:27浏览次数:42  
标签:JAVA 游戏 int 迷阵 窗体 new import data public

大家帮我看看这个代码有没有问题,为什么将z设为作弊器但是在IDE中运行出来没有用

//测试类
import javax.swing.*;

public class Test {
    public static void main(String[] args) {
        new MainFrame();
    }
}

import javax.swing.*;
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 MainFrame extends JFrame implements KeyListener {
    int[][] data={
            {1,2,3,4},
            {5,6,7,8},
            {9,10,11,12},
            {13,14,15,0}
    };
    int[][] win={
            {1,2,3,4},
            {5,6,7,8},
            {9,10,11,12},
            {13,14,15,0}
    };
    int row;            //0号元素行坐标位置
    int column;        //0号元素列坐标位置
    int count;         //统计步数
public MainFrame(){
    //窗体对象.addKeyListener
    this.addKeyListener(this);
    //初始化窗体
    initFrame();
    //初始化数据
    initData();
    //绘制游戏界面
    paintView();
    //设置窗体可见
    setVisible(true);
}

    /**
     * 此方法用于初始化数据(打乱二维数组)
     */
    public void initData(){
        //准备Random对象
    Random r=new Random();
    //遍历二维数组,获取到每一个元素
    for (int i = 0; i < data.length; i++) {
        for (int j = 0; j < data.length; j++) {
           int randomX= r.nextInt(4);
            int randomY=r.nextInt(4);
            int tmp=data[i][j];
            data[i][j]=data[randomX][randomY];
            data[randomX][randomY]=tmp;
        }
    }
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data.length; j++) {
              if (data[i][j]==0){
                   row=i;
                  column=j;
              }

            }
        }
}

    /**
     *  此方法此方法用于初始化窗体
     */
    public void initFrame(){
       //设置窗体的宽和高
        setSize(514,595);
        //设置窗体的关闭模式(关闭窗体的同时程序也一并关闭)
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //设置窗体的标题
        setTitle("石头迷阵单机版1.0");
        //设置窗体在任何时候都置于屏幕最顶层
        setAlwaysOnTop(true);
        //设置窗体居中
        setLocationRelativeTo(null);
        //取消窗体默认布局
        setLayout(null);

    }

    /**
     * 此方法此方法用于绘制游戏界面
     */
    public void paintView(){
        //用于绘制游戏界面前清空面板
        getContentPane().removeAll();
        //添加胜利图片到窗体中
      if (victory()){
          JLabel winLabel=new JLabel(new ImageIcon("D:\\Develop\\Java\\石头迷阵图片\\win.png"));
          winLabel.setBounds(124,230,266,88);
          getContentPane().add(winLabel);
      }
      //统计步数
      JLabel scoreLabel=new JLabel("步数为:"+count);
      scoreLabel.setBounds(50,20,100,20);
      getContentPane().add(scoreLabel);
      //重新游戏
        JButton btn=new JButton("重新游戏");
        btn.setBounds(350,20,100,20);
        getContentPane().add(btn);
        btn.setFocusPainted(false);
        btn.addActionListener(e -> {
            count=0;
            initData();
            paintView();
        });
    for (int i=0;i<4;i++){
        for (int j=0;j<4;j++){
            JLabel imageLabel=new JLabel(new ImageIcon("D:\\Develop\\Java\\石头迷阵图片\\"+data[i][j]+".png"));
            imageLabel.setBounds(50+100*j,90+100*i,100,100);
            getContentPane().add(imageLabel);
        }
    }

    JLabel jl17=new JLabel(new ImageIcon("D:\\Develop\\Java\\石头迷阵图片\\background.png"));
    jl17.setBounds(26,30,459,484);
    getContentPane().add(jl17);
    //用于刷新界面
        getContentPane().repaint();
}
//此方法用于判断游戏是否胜利
public boolean victory(){

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


    /**
     * 此方法用于处理移动业务
     */
    private void move(int keyCode) {
        if (victory()){
            return;
        }
        if (keyCode ==37){
           //空格和右侧数据做交换
            if (column==3){
                return;
            }
            //data[row][column] data[row][column+1]
            int tmp=data[row][column];
            data[row][column]=data[row][column+1];
            data[row][column+1]=tmp;
            column++;
            count++;
        }else if (keyCode ==38){
            if (row==3){
                return;
            }
            //空格和下侧数据做交换
            //data[row][column] data[row+1][column]
            int tmp=data[row][column];
            data[row][column]=data[row+1][column];
            data[row+1][column]=tmp;
            row++;
            count++;
        }else if (keyCode ==39){
            if (column==0){
                return;
            }
            //空格和左侧数据做交换
            //data[row][column] data[row][column-1]
            int tmp=data[row][column];
            data[row][column]=data[row][column-1];
            data[row][column-1]=tmp;
            column--;
            count++;
        }else if(keyCode ==40){
            if (row==0){
                return;
            }
            //空格和上侧数据做交换
            //data[row][column] data[row-1][column]
            int tmp=data[row][column];
            data[row][column]=data[row-1][column];
            data[row-1][column]=tmp;
            row--;
            count++;
        }else if(keyCode ==90){
            //触发作弊器
            data=new int[][]{
                    {1,2,3,4},
                    {5,6,7,8},
                    {9,10,11,12},
                    {13,14,15,0}
            };
        }
    }
    @Override
    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();
        //此方法用于处理移动业务
        move(keyCode);
        //每一次移动后,都重新绘制游戏界面
        paintView();

    }

    //---------------------------------------------
    @Override
    public void keyReleased(KeyEvent e) {

    }
    @Override
    public void keyTyped(KeyEvent e) {

    }
//---------------------------------------------
}

标签:JAVA,游戏,int,迷阵,窗体,new,import,data,public
From: https://blog.51cto.com/u_15988249/6595571

相关文章

  • java相关
    1、java环境建立2、windows系统下maven环境设置windows系统下下载二进制包apache-maven-3.6.0-bin.zip,然后解压。 第二种方法:使用绝对路径添加maven环境变量,直接在path里面的最前面添加c:\maven\bin;4、windows安装tomcat  设置环境变量也用绝对路径下载https://tomcat.apache.......
  • Java 期中考试及pta4、5总结
    菜单计价1~3(1)前言:期中考试的题目比较简单但是具有典型意义,ptA的题和之前的大差不差,所以会省略一些总体来说这几次作业还是对Java的学习有较大的帮助的,需要认真对待(2)设计与分析:一测验1-圆类设计下面是题目要求:7-1测验1-圆类设计分数 12......
  • centos7安装java
    1.tar-zxvfjdk-8u11-linux-x64.tar.gz 2.编辑环境变量vim/etc/profile 3.source/etc/profile4.java-version ......
  • [转]前台传递给后台的JSON字符串中的引号 “” 在JAVA后台被转义为 &quot
    1、问题:前台数据,JSON字符串带有引号“”,数据被传递到后台,引号被转义为&quot,后台无法解析。前台数据如下:正常后台数据如下:大部分正常,只有JSON字符串中的“”被转义为&quot2、解决:方法一:使用apache的lang包里的方法StringappJson=StringEscapeUtils.un......
  • 深入学习 Java 类加载机制
    博主介绍:✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,阿里云专家博主,华为云云享专家✌......
  • Java-语法基础
    JDK8复习用Java前置知识JavaSEJavaStandardEdition标准版支持面向桌面级应用(如Windows下的应用程序)的Java平台,提供了完整的Java核心API此版本以前称为J2SEJavaEEJavaEnterpriseEdition企业版一套用于企业环境下的应用程序的应用方案(包含:Servlet、Jsp),主要针......
  • Java基础语法
    1、Java的八种基本数据类型1、byte1字节取值范围:-128~1272、short2字节取值范围:-32768~327673、int4字节取值范围:-231~231-1#int是开发中最常用的,也是Java中默认的数据类型4、long8字节取值范围:-263~263-1#声明超过int取值范围的lon......
  • java流程控制
    一、Scanner对象java的一个工具类用来获取用户输入使用方式:导入java.util.Scanner包就能使用基本语法Scanners=newScanner(System.in);通过Scanner类的next()与nextLine()方法获取输入字符串读取值之前我们一般需要使用hasNext()与hasNextLine()判断是......
  • 体系化学习Java(Java面试专题)
    tip:此贴为目录贴,定期更新toNew:时间是最好的答案,它能解决所有问题。坚持!!!**本文章旨在总结Java的知识生态以及帮助需要学习者和求职者,本人从事应用安全和大数据领域,有8年开发经验,5年面试官经验,Java技术专家,有技术相关问题和面试相关问题均可以留言讨论。......
  • java http大文件断点续传分片上传
    ​ 这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数下面直接贴代码吧,一些难懂的我大部分都加上注释了:上传文件实体类:看得出来,实体类中已经有很多我们需要的功能了,还有实用的属性。如MD5秒传的信息。pub......