Java实现——华容道数字小游戏

news/2024/11/23 2:05:54/

华容道数字

文件创建

在这里插入图片描述

实现代码

App.java

package com.Allen.Stone;import javax.swing.*;public class App {public static void main(String[] args) {MainJFrame mainJFrame=new MainJFrame();}
}

MainJFrame

package com.Allen.Stone;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 MainJFrame extends JFrame implements KeyListener, ActionListener
{//成员变量————初始化一个二维数组来设置图片int date[][]=new int[4][4];// 记录空白块的索引位置int x0=0;int y0=0;//记录步数int count=0;//比对胜利使用的数组private int[][] win={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,0},};/*** 此方法为构造方法* */public MainJFrame(){//初始化窗口this.initFJrame();//初始化数据this.InitDate();//绘制界面this.paintView();//初始化菜单this.InitMenu();//设置窗口可见super.setVisible(true);}/***此方法用于初始化窗口,所有窗口相关设置在此方法中实现*/public void initFJrame(){//当子类没有重写父类方法,可以不需要使用super.的方式找到父类的方法(看个人习惯)//设置窗口名字super.setTitle("石头迷镇");//设置窗口大小super.setSize(514,595);//设置窗口居中super.setLocationRelativeTo(null);//设置窗口置顶super.setAlwaysOnTop(true);//设置窗口关闭模式super.setDefaultCloseOperation(3);//为窗体添加键盘监听this.addKeyListener(this);//取消默认布局super.setLayout(null);}/*** 此方法用于初始化菜单*/private void InitMenu(){//创建JMenuBarJMenuBar jMenuBar=new JMenuBar();//创建栏目对象 JMen(功能)JMenu jMenu=new JMenu("功能");//创建JMenuItem对象 ---重新开始JMenuItem item=new JMenuItem("重新开始");item.addActionListener(this);//添加重新开始 到jMenu中jMenu.add(item);//添加功能到jMenuBar中jMenuBar.add(jMenu);//给窗体对象设置菜单super.setJMenuBar(jMenuBar);}/*** 此方法用于绘制游戏界面*/public void paintView(){//移除掉,界面中的所有内容this.getContentPane().removeAll();//设置步数显示JLabel jL_num=new JLabel("步数"+count);jL_num.setBounds(50,20,100,20);this.getContentPane().add(jL_num);//设置胜利图片if(this.victory()){JLabel win=new JLabel(new ImageIcon("E:\\石头迷镇模块\\win.png"));win.setBounds(124,230,266,88);this.getContentPane().add(win);}//设置谜镇方块for (int i = 0; i < 4; i++){for (int j = 0; j < 4; j++){JLabel jLabel=new JLabel(new ImageIcon("E:\\石头迷镇模块\\"+date[i][j]+".png"));jLabel.setBounds(50+100*j,90+100*i,100,100);super.getContentPane().add(jLabel);}}//设置背景布局JLabel background=new JLabel(new ImageIcon("E:\\石头迷镇模块\\background.png"));background.setBounds(26,30,450,484);super.getContentPane().add(background);//刷新界面this.getContentPane().repaint();}/*** 初始化迷阵* */public void InitDate(){int nums[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};//打乱数组中数据Random r=new Random();for (int i = 0; i < nums.length; i++) {int index=r.nextInt(nums.length);int temp=nums[i];nums[i]=nums[index];nums[index]=temp;}for (int i = 0; i < nums.length; i++) {//将打乱的数组放到date数组中date[i/4][i%4]=nums[i];if(nums[i]==0){//用于记录空白方块的坐标x0=i/4;y0=i%4;}}}/*** 判断当前数组数据, 和胜利数组数据是否相同*/public boolean victory(){for (int i = 0; i < date.length; i++) {for (int j = 0; j < date[i].length; j++) {if(date[i][j]!=win[i][j]){return false;}}}return true;}/*** 表示方块向左移动* */public void moveToLeft(){date[x0][y0]=date[x0][y0+1];date[x0][y0+1]=0;y0++;}/*** 表示方块向上移动* */public void moveToTop(){date[x0][y0]=date[x0+1][y0];date[x0+1][y0]=0;x0++;}/*** 表示方块向右移动* */public void moveToRight(){date[x0][y0]=date[x0][y0-1];date[x0][y0-1]=0;y0--;}/*** 表示方块向下移动* */public void moveToXia(){date[x0][y0]=date[x0-1][y0];date[x0-1][y0]=0;x0--;}/*** 键盘按下的时候触发的方法,控制上下左右*/@Overridepublic void keyPressed(KeyEvent e) {int keyCode = e.getKeyCode();if (keyCode == 37) {if (y0 == 3) {return;} else {// 左移动moveToLeft();count++;}} else if (keyCode == 38) {if (x0 == 3) {return;} else {// 上移动moveToTop();count++;}} else if (keyCode == 39) {if (y0 == 0) {return;} else {// 右移动moveToRight();count++;}} else if (keyCode == 40) {if (x0 == 0) {return;} else {// 下移动this.moveToXia();count++;}} else if (keyCode == 87) {//此操作是一个作弊码,用来测试程序使用,激活方式,单个按键wdate = new int[][]{{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12},{13, 14, 15, 0}};}// 绘制窗体paintView();}/*** 重新开始*/@Overridepublic void actionPerformed(ActionEvent e) {//重新开始,初始化步数count=0;//初始化数据this.InitDate();//绘制窗体this.paintView();}/*** 此方法处理的键盘事件较为局限, 不用理会*/@Overridepublic void keyTyped(KeyEvent e){}/*** 键盘松开时按下的方法*/@Overridepublic void keyReleased(KeyEvent e) {}}

代码所需要的图片(石头迷阵)我已经上传到我的资源,需要的可以去找
https://download.csdn.net/download/weixin_52237916/15848976


http://www.ppmy.cn/news/550164.html

相关文章

吴恩达深度学习第二周作业

1 .导入库 import numpy as np import matplotlib.pyplot as plt import h5py from lr_utils import load_dataset 2.lr_utils.py代码里的东西 import numpy as np import h5py def load_dataset(): #取训练集 train_dataseth5py.File(‘datasets/train_catvnoncat.h5’,“…

C语言自制华容道游戏代码

程序简介 华容道&#xff0c;画风参考的是手机程序&#xff1a;超级华容道。玩法是将大块移动至下层的中间。随机盘面&#xff0c;难度适中&#xff0c;自动解题。 程序随机了横块纵块数量&#xff0c;所以会有无解或难解&#xff0c;生成函数保证了加载出来的盘面是可玩的&a…

用scratch编写游戏-数字华容道(不移动块法)

前边已写了两篇博客介绍用scratch编写“数字华容道”游戏的方法。在以前设计中有一个误区&#xff0c;认为只有通过移动带数字的块才能完成数字的重新排列。实际上采用克隆法&#xff0c;角色“带数字的块”有25个造型&#xff0c;包括24个数字(1到24)和一个空白造型。其克隆体…

游戏数字华容道的改进

在“用scratch编写游戏-数字华容道”(以后简称“前文”)一文中仅介绍了3行3列数字块的设计方法。本文介绍克隆法&#xff0c;该法在设计更多行和列的数字华容道时&#xff0c;使所有数字块都使用相同的脚本&#xff0c;极大减少了工作量。两方法采用的数据结构基本相同。首先给…

用scratch编写游戏-数字华容道

由于疫情&#xff0c;只能在家&#xff0c;外孙女要学scratch&#xff0c;先学了南海出版社的“编程真好玩”&#xff0c;然后和外孙女一起用scratch编了一些游戏&#xff0c;想把编写步骤和设计思想写出来&#xff0c;和大家交流。刚编了“数字华容道”&#xff0c;就先说它吧…

NOIP2013华容道

NOIP2014华容道 说起来这道题还挺有难度的&#xff0c;我用了两个小时才把它AC&#xff0c;要是在赛场上的话。。。。这种题就果断放弃了 下面步入正题 题目描述 Description 小 B 最近迷上了华容道&#xff0c;可是他总是要花很长的时间才能完成一次。于是&#xff0c;他想到…

CreateJS实现【益智类数字华容道小游戏】

系列文章 微信小程序(游戏)----拖拽拼图(图片分块和打乱顺序)微信小程序(游戏)----五子棋【taro react】(游戏) ---- 类2048游戏,看看在秦朝,功勋爵位你能到哪一级【taro react】(游戏) ---- 小游戏 2048 的实现1. 预览 1.1 在线h5 益智类数字华容道小游戏 在线h5 益…

最强大脑之《数字华容道》游戏Android端的具体实现

项目地址&#xff1a;https://github.com/ming723/NumberHrd 游戏效果&#xff1a; 前提摘要&#xff1a; 前两天粘贴出来了地址&#xff0c;不知道大家下载了没有&#xff0c;如果玩的话&#xff0c;是不是发现了几个潜在的问题&#xff0c;如果按完开始键后&#xff0c;不停…