//测试类
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() {//窗体对象.addKeyListenerthis.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}};}}@Overridepublic void keyPressed(KeyEvent e) {int keyCode = e.getKeyCode();//此方法用于处理移动业务move(keyCode);//每一次移动后,都重新绘制游戏界面paintView();}//---------------------------------------------@Overridepublic void keyReleased(KeyEvent e) {}@Overridepublic void keyTyped(KeyEvent e) {}
//---------------------------------------------
}

Java石头迷阵小游戏相关推荐

  1. 自学Java篇之JFrame创建《石头迷阵小游戏》

    自学Java篇之JFrame创建<石头迷阵小游戏> 根据黑马程序员java教程自学完java基础,觉得石头迷阵小游戏案例具有一定的编程练习价值,记录之. 最终效果: 案例主要思想流程: ​ ...

  2. 黑马程序员_石头迷阵小游戏

    黑马程序员_石头迷阵小游戏 源代码 一些说明: 1)这些是我看b站黑马程序员的视频,自己手打的,想分享一下,如果有侵权啥的请联系我,马上删除 2)一些比较重要的我都有给注释 3)工具idea idk版 ...

  3. 基于Java的石头迷阵小游戏的设计与实现

    文章目录 1 搭建游戏主界面 1.1 用JFrame类来创建窗体 (知识点继承) 1.2 菜单制作JMenuBar 1.3 添加图片 1.4 代码 2 添加游戏功能 2.1 事件监听机制 2.2 设计 ...

  4. 不愧是大厂牛人!用Java实现象棋小游戏(附超详细,超长究极无敌代码)

    本文实例为大家分享了java实现象棋小游戏的具体代码,供大家参考,具体内容如下 用Eclipse编写 java环境1.8jdk 代码如下 package xiangqi象棋; /***中国象棋Java ...

  5. Java练手小游戏---黄金矿工

    你玩过4399曾经最火的黄金矿工小游戏吗,黄金矿工小游戏是一款休闲娱乐的一个挖宝游戏,在游戏中地下会有许多的宝藏,你得想办法把它们都挖出来,作为矿工的你,对你来说是轻车熟路的,能不能挖到宝,看你抓取的 ...

  6. JAVA实现2048小游戏

    2048小游戏也算是一款好玩的益智休闲小游戏,下面本博主用 java 语言将该游戏复现,感兴趣的小伙伴点击 关注 哦! 同时博主还用 python 语言复现了该游戏,可点击以下链接浏览博主的另一篇文章 ...

  7. java文字类小游戏2.0版本

    java文字类小游戏 用javaFx面板显示文字类小游戏,目前正已完成基本打斗和打怪爆出武器的开发,后续会不断更新示例图如下: 运行这个类开始代码我已上传至码云,有需要的小伙伴自行拉取代码,git项目 ...

  8. Java 贪吃虫小游戏

    我参考了[Java]Java实现贪吃蛇小游戏(带详细注释)和 java贪吃蛇小游戏(详解) 先设置需要用到的常数 package Snake;public class ConstantNumber { ...

  9. Java Swing 经典小游戏《飞机大战》———— (四)碰撞检测 游戏状态与得分 玩家升级

    前期回顾 Java Swing 经典小游戏<飞机大战>---- (一)获取素材,创建窗口,添加滚动背景,双缓冲 Java Swing 经典小游戏<飞机大战>---- (二)玩家 ...

最新文章

  1. 不要和诱惑较劲,而应离得越远越好。!!!
  2. java8新特性(7)— Base64
  3. DFS分布式文件系统安装部署
  4. ROS 图像相关的命令与应用
  5. Spring_Hibernate
  6. mysql 纵列转横列_mysql行列转换方法总结
  7. linux内核之数据机构
  8. 线性代数 动手学深度学习 pytorch
  9. 常见的windows 命令大全
  10. 2016版Excel加载宏实现加载空间分析库
  11. Python学习之Turtle库
  12. MySQL 5.7.32-winx64安装教程(支持一台主机安装多个MySQL服务)
  13. android ios 录音功能,iOS与Android的音频互通
  14. tableau系列之在 Tableau 中构建地图
  15. Android 蓝牙键盘快捷键
  16. 6款沙发背景墙装饰画 总有一幅你喜欢的
  17. 黔程似锦——2021国庆游攻略
  18. 微信赌场——H5棋牌游戏渗透之旅
  19. 晶闸管整流桥matlab仿真,matlab仿真模型作业
  20. MAE 掩码自编码是可扩展的学习

热门文章

  1. 学人工智能以后从事什么工作?AI就业方向-人工智能就业
  2. 群体智能优化算法之鲸鱼优化算法
  3. Android中的OKHttp请求网络
  4. PyQt5 右键单击鼠标代码
  5. js如何把字符串转成数组对象
  6. 编程:输入圆柱体的底面半径r和高h,计算并输出圆柱体的体积
  7. OutLook 2007 本地归档
  8. 带头+双向+循环链表(C语言)
  9. 关于哨兵2号数据辐射定标
  10. 像ChatGPT玩转Excel数据