java拼图小游戏

 

第一步是创建项目 项目名自拟

第二部创建个包名 来规范class  

然后是创建类  创建一个代码类 和一个运行类 

代码如下:

package heima;import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.border.BevelBorder;public class GameJFrame  extends JFrame implements KeyListener,ActionListener{//GameJFrame这个界面表示的就是 游戏的主界面//以后跟游戏相关的所有逻辑都写在这个类中//创建一个二维数组//目的:用来管理数据//加载图片的时候,会根据二维数组中的数据来进行加载int[][] data =new int[4][4];//记录空白方块在二维数组中的位置int x=0;int y=0;//定义一个变量,记录当前展示图片的路径String path = "D:\\学习资料\\Java\\拼图小游戏\\image\\animal\\animal1\\";//定义一个二维数组  存储一个正确的数据int[][] win= {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16},};//定义变量来统计部署int step = 0 ;//创建项目下面的条目对象JMenuItem replayItem =new JMenuItem("重新游戏");JMenuItem reLoginItem =new JMenuItem("重新登录");JMenuItem closeItem =new JMenuItem("关闭游戏");JMenuItem accountItem =new JMenuItem("郭文杰的微信");public GameJFrame () {//初始化界面intiJFrame();//初始化菜单initJMenuBar();//初始化数据initData();//初始化图片(根据打乱之后的结果去加载图片)initImage();//设置窗体可见  放到最后this.setVisible(true);
}//初始化数据private void initData() {//1.定义一个一维数组int[] tempArr= {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};//2.打乱数组中的数据顺序//遍历数组中得到的每一个元素,拿到每一个元素跟随索引上的数据进行交换Random r = new Random();for(int i =0 ;i<tempArr.length;i++) {//获取随机索引int index = r.nextInt(tempArr.length);//拿到遍历到每一个数据,跟随机索引上的数据进行交换int temp =tempArr[index];tempArr[i] = tempArr[index];tempArr[index] =temp;}//4.给二维数组添加数据//遍历一维数组tempArr得到每一个元素, 把每一个元素依次添加到二维数组当中for(int i=0;i<tempArr.length;i++) {if(tempArr[i]==0) {x=i/4;y=i%4;}else {data[i/4][i%4]=tempArr[i];}}}//初始化图片//添加图片的时候,就需要按照二维数组中管理的数据添加图片private void initImage() {//清空原本已经出现的所有图片this.getContentPane().removeAll();if(victory()) {//显示胜利图标JLabel winJLabel = new JLabel(new ImageIcon("D:\\学习资料\\Java\\拼图小游戏\\image\\win.png"));winJLabel.setBounds(203,283,197,73);this.getContentPane().add(winJLabel);}JLabel stepCount = new JLabel ("步数"+step);stepCount.setBounds(50,30,100,20);this.getContentPane().add(stepCount);//先加载的图片在上方  后加载的图片在下方//外循环---把内循环重复执行了4次for (int i = 0; i<4;i++) {//内循环---表示一行添加了4张图片for (int j = 0; j<4;j++) {//获取当前要加载图片的序号int num =  data[i][j];//创建一个JLabel的对象(管理容器)JLabel jLabel =new JLabel(new ImageIcon(path+ num + ".jpg"));//指定图片位置jLabel.setBounds(105*j+83,105*i+134,105,105);//给图片添加边框jLabel.setBorder(new BevelBorder(BevelBorder.LOWERED));//设置边框凹下来//把管理容器添加到界面中this.getContentPane().add(jLabel);//取消默认的居中放置}}JLabel background =new JLabel(new ImageIcon("D:\\学习资料\\Java\\拼图小游戏\\image\\background.png"));background.setBounds(40,40,508,560);//将背景图片添加到界面中this.getContentPane().add(background);//刷新一下界面this.getContentPane().repaint();}public void intiJFrame() {//GameJFrame这个界面表示的就是 游戏的主界面//以后跟游戏相关的所有逻辑都写在这个类//设置界面的宽高this.setSize(603,680);//设置界面的标题this.setTitle("拼图单机版v1.8");//设置界面置顶this.setAlwaysOnTop(true);//设置页面居中this.setLocationRelativeTo(null);//设置关闭模式this.setDefaultCloseOperation(3);//取消默认的居中放置  只有取消了才会按照xy的形式来添加组件this.setLayout(null);//给整个界面添加键盘监听事件this.addKeyListener(this );} public void initJMenuBar(){//初始化菜单JMenuBar jMenuBar =new JMenuBar();//常见菜单上的两个选项的对象(功能 关于我们 )JMenu functionJMenu = new JMenu("功能");JMenu aboutJMenu = new JMenu("关于我们");//将每一个选项下面的条目放在选项当中functionJMenu.add(replayItem);functionJMenu.add(reLoginItem);functionJMenu.add(closeItem);aboutJMenu.add(accountItem);//给条目绑定时间replayItem.addActionListener(this);reLoginItem.addActionListener(this);closeItem.addActionListener(this);accountItem.addActionListener(this);//将菜单里的两个选项添加到菜单当中去jMenuBar.add(functionJMenu);jMenuBar.add(aboutJMenu);//给整个界面设置菜单this.setJMenuBar(jMenuBar);}@Overridepublic void keyTyped(KeyEvent e) {// TODO Auto-generated method stub}@Override//按下不松时会调用这个方法public void keyPressed(KeyEvent e) {// TODO Auto-generated method stubint code = e.getKeyCode();if(code==65) {//把界面所有的图片删除this.getContentPane().removeAll();//加载第一张完整的图片JLabel all =new JLabel(new ImageIcon(path +"all.jpg"));all.setBounds(83,134,420,420);this.getContentPane().add(all);//加载背景图片//添加背景图片JLabel background =new JLabel(new ImageIcon("D:\\学习资料\\Java\\拼图小游戏\\image\\background.png"));background.setBounds(40,40,508,560);//将背景图片添加到界面中//把背景图片添加到界面中this.getContentPane().add(background);//刷新界面this.getContentPane().repaint();}}@Overridepublic void keyReleased(KeyEvent e) {// TODO Auto-generated method stub//对 上,下,左,右进行判断//左37 上38 右39 下40int code =e.getKeyCode();if(code ==37) {System.out.println("向左移动");if(y==3){return;}data[x][y] =data[x][y+1];data[x][y+1]=0;y++;//有一次移动,计步器自增一次step++;//调用方法按照最新的数字加载图片initImage();}else if(code ==38) {System.out.println("向上移动");//逻辑//空白方框下方的数字往上移动//x,y表示空白方块 //x+1,y表示空白方块下方的数字//把空白方块下方的数字赋值给空白方块if(x==3){return;}data[x][y] =data[x+1][y];data[x+1][y]=0;x++;//有一次移动,计步器自增一次step++;//调用方法按照最新的数字加载图片initImage();}else if(code ==39) {System.out.println("向右移动");if(y==0){return;}data[x][y] =data[x][y-1];data[x][y-1]=0;y--;//有一次移动,计步器自增一次step++;}else if(code ==40) {System.out.println("向下移动");if(x==0){return;}data[x][y] =data[x-1][y];data[x-1][y]=0;x--;//有一次移动,计步器自增一次step++;//调用方法按照最新的数字加载图片initImage();}else if(code ==65){initImage();}else if(code ==87) {data =new int[][] {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};initImage();}}//判断data数组中的数据是否跟win数组中的i昂同//如果全部相同返回true,否则返falsepublic boolean victory() {for( int i=0;i<data.length;i++) {//i:依次表示二维数组中的data里面的索引//data[i]:依次表示每一个一维数组for(int j=0;j<data[i].length;j++) {if(data[i][j] !=win[i][j]) {//只要有一个数据不一样则返回falsereturn false;}}}//循环结束表示数组遍历比较完毕  ,全部一样的话返回truereturn false;}public void  actionPerformed(ActionEvent e) {//获取当前被点击的条目对象Object obj =e.getSource();//判断if(obj ==replayItem) {System.out.println("重新游戏");//计步器清零step = 0;//再次打乱二维数组initData();//重新加载图片initImage();}else if(obj == reLoginItem) {System.out.println("重新登录");this.setVisible(false);//打开登入界面new LoginJFrame();}else if(obj == closeItem) {System.out.println("关闭游戏");//直接关闭游戏System.exit(0);}else if(obj == accountItem) {System.out.println("丁国俊的微信");JDialog jDialog=new JDialog();//创建一个管理图片的容器对象jDialogJLabel jLabel = new JLabel(new ImageIcon("D:\\学习资料\\Java\\拼图小游戏\\image\\微信图片_20231119183326.jpg")) ;//设置位置和宽高jLabel.setBounds(0,0,258,258);//把图片添加到弹框中jDialog.getContentPane().add(jLabel);//设置弹框大小jDialog.setSize(344,344);//让弹框置顶jDialog.setAlwaysOnTop(true);//让弹框剧中jDialog.setLocationRelativeTo(null);//弹框不关闭则无法操作下面的界面jDialog.setModal(true);//让弹框显示出来jDialog.setVisible(true);}}
}

 测试类:

package heima;public class App {public static void main(String[]args) {//表示程序的启动入口//如果我们想要开启一个界面,就创建谁的对象就可以了new GameJFrame();//调用游戏主界面窗体//new RegisterJFrame();//注册界面//new LoginJFrame();//登入界面}
}

运行结果图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/151274.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速排序知识总结

快速排序思维导图&#xff1a; 快速排序算法模版&#xff1a; #include <iostream>using namespace std;const int N 1e5 10;int n; int q[N];void quick_sort(int q[], int l, int r) {if (l > r) return;int x q[(l r) / 2], i l - 1, j r 1;while (i < …

VS2022 配置 OpenCV并开始第一个程序

VS2022安装 首先下载 VisualStudioSetup.exe 下载连接&#xff1a;Visual Studio 2022 IDE - 适用于软件开发人员的编程工具 点击上面的链接即可进入到下载页面。进入到下载页面&#xff0c;可看到有几个版本可选&#xff0c;如下&#xff1a; 我选择的是企业版&#xff1a;E…

YOLO目标检测——无人机航拍行人检测数据集下载分享【含对应voc、coc和yolo三种格式标签】

实际项目应用&#xff1a;智能交通管理、城市安防监控、公共安全救援等领域数据集说明&#xff1a;无人机航拍行人检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;…

2023年通信安全员ABC证证模拟考试题库及通信安全员ABC证理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年通信安全员ABC证证模拟考试题库及通信安全员ABC证理论考试试题是由安全生产模拟考试一点通提供&#xff0c;通信安全员ABC证证模拟考试题库是根据通信安全员ABC证最新版教材&#xff0c;通信安全员ABC证大纲整理…

DBS note3:B+ Trees

目录 1、介绍 2、B树特征 3、插入 4、删除 5、存储记录 1&#xff09;方法1&#xff1a;按值存储 2&#xff09;方法2&#xff1a;按引用存储 3&#xff09;方法3&#xff1a;按引用列表存储 6、聚类&#xff08;Clustering&#xff09; 1&#xff09;非聚类&#xff…

调整Windows键盘上只能看到拼音而无法看到实际的文本以及关闭输入法悬浮窗方法

一、输入法设置 如果您在键盘上只能看到拼音而无法看到实际的文本&#xff0c;这可能是因为您的输入法设置为中文拼音输入法或其他仅显示拼音的输入法。 要解决这个问题&#xff0c;您可以尝试以下方法&#xff1a; 1. 切换输入法&#xff1a;按下 Shift Alt 组合键或 Wind…

python -opencv 边缘检测

python -opencv 边缘检测 边缘检测步骤: 第一步&#xff1a;读取图像为灰度图 第二步&#xff1a;进行二值化处理 第三步&#xff1a;使用cv2.findContours对二值化图像提取轮廓 第三步&#xff1a;将轮廓绘制到图中 代码如下&#xff1a; from ctypes.wintypes import SIZ…

聊一聊go的单元测试

文章目录 概要一、测试框架1.1、testing1.2、stretchr/testify1.3、smartystreets/goconvey1.4、cweill/gotests 二、打桩和mock2.1、打桩2.2、mock2.2.1、mockgen 三、基准测试和模糊测试3.1、基准测试3.2、模糊测试 四、总结4.1、小结4.2、其他4.3、参考资料 概要 软件测试是…

前端入门(二)Vue2到Vue3

文章目录 Vue简介Vue的特点Hello, Vue Vue基本语法模板语法数据绑定&#xff08;v-bind、v-model&#xff09;el与data的两种写法 数据代理实现原理Object.defineProperty()数据代理 事件处理&#xff08;v-on:click / click&#xff09;事件修饰符键盘事件&#xff08;略&…

万户OA upload任意文件上传漏洞复现

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品&#xff0c;统一的基础管理平台&#xff0c;实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台&#xff0c;将外网信息…

OSG文字-显示汉字 (1)

OSG文字 适当的文字信息对于显示场景信息是非常重要的。在 OSG中&#xff0c;osgText 提供了向场景中添加文字的强大功能&#xff0c;由于有第三方插件 FreeType 的支持&#xff0c;它完全支持TrueType字体。 读者可能对 FreeType和TrueType还不太了解&#xff0c;下面进行具体…

在windows Server安装Let‘s Encrypt的SSL证书

1、到官网&#xff08;https://certbot.eff.org/instructions?wswebproduct&oswindows&#xff09;下载 certbot客户端。 2、安装客户端&#xff08;全部默认安装即可&#xff09; 3、暂停IIS中的网站 开始菜单中找到并运行“Certbot”&#xff0c;输入指令&#xff1a; …

新一代车载以太网传输技术研讨会(AEM)顺利圆满举行

时间定格在2023年11月17日&#xff0c;新一代车载以太网传输技术研讨会在东莞国际会展中心举行。来自相关的的企业几百家。当然&#xff0c;深圳维信仪器作为主办方&#xff08;AEM线束测试仪中国区总平台&#xff09;举优质的线束测试设备&#xff0c;不论是手持线束测试&…

苹果(Apple)公司的新产品开发流程(一)

目录 简介 ANPP CSDN学院推荐 作者简介 简介 苹果这家企业给人的长期印象就是颠覆和创新。 而流程跟创新似乎是完全不搭边的两个平行线&#xff1a; 流程是一个做事的标准&#xff0c;定义了权力的边界&#xff0c;对应人员按章办事&#xff1b;而创新的主旋律是发散&am…

实时监控电脑屏幕的软件丨同时查看12台电脑屏幕

Hello 大家好 又见面啦 今天给大家推荐两款比较实用的监控电脑使用情况、屏幕的软件&#xff01; 软件一 实时性能监控 从软件名就可以看出来&#xff0c;这是一款电脑性能监测工具。它可以实时监测内存、CPU、磁盘占用情况&#xff0c;也能一键结束进程&#xff0c;给电脑提…

【zabbix监控三】zabbix之部署代理服务器

一、部署代理服务器 分布式监控的作用&#xff1a; 分担server的几种压力解决多机房之间的网络延时问题 1、搭建proxy主机 1.1 关闭防火墙&#xff0c;修改主机名 systemctl disbale --now firewalld setenforce 0 hostnamectl set-hostname zbx-proxy su1.2 设置zabbix下…

BP神经网络原理与如何实现BP神经网络

本文部分图文来自《老饼讲解-BP神经网络》bp.bbbdata.com 目录 一、BP神经网络的背景生物学原理 二、BP神经网络模型 2.1 BP神经网络的结构 2.2 BP神经网络的激活函数 三、BP神经网络的误差函数 四、BP神经网络的训练 4.1 BP神经网络的训练流程 4.2 BP神经网络的训练流…

【运维篇】5.6 Redis server 主从复制配置

文章目录 0. 前言1. 配置方式步骤1: 准备硬件和网络步骤2: 安装Redis步骤3: 配置主服务器的Redis步骤4: 配置从服务器的Redis步骤5: 测试复制功能步骤6: 监控复制状态 2. 参考文档 0. 前言 在Redis运维篇的第5.6章节中&#xff0c;将讨论Redis服务器的主从复制配置。在开始之前…

如何实现MATLAB与Simulink的数据交互

参考链接&#xff1a;如何实现MATLAB与Simulink的数据交互 MATLAB是一款强大的数学计算软件&#xff0c;Simulink则是一种基于模型的多域仿真平台&#xff0c;常用于工程和科学领域中的系统设计、控制设计和信号处理等方面。MATLAB和Simulink都是MathWorks公司的产品&#xff0…

数据结构【DS】图的应用

图的连通性问题 最少边数 最多边数 无向图非连通 &#x1d48e;&#x1d7ce; &#x1d48e;&#x1d48f;−&#x1d7d0;∗(&#x1d48f;−&#x1d7cf;)/&#x1d7d0; 无向图连通 &#x1d48e;&#x1d48f;−&#x1d7cf; &#x1d48e;&#x1d48f;∗(&#…