当前位置: 首页 > news >正文

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();//登入界面}
}

运行结果如下:

相关文章:

Java拼图

第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 创建一个代码类 和一个运行类 代码如下&#xff1a; package heima;import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import jav…...

Linux 怎样通过win 远程桌面连接链接Linux后台服务器的可视化图形界面

目的概述&#xff1a;因不想后台直接操作&#xff08;操作不便&#xff09;&#xff0c;所以想到能否基于xrdp协议服务利用 win自带的远程桌面服务&#xff0c;链接到后台&#xff0c;类似于vnc的使用方式&#xff0c;涉及操作系统版本&#xff1a;win11 、 CentOS 7.4 、CentO…...

Java 实现随机图形

要求 定义4个类&#xff0c;MyShape、MyLine、MyRectangle和MyOval&#xff0c;其中MyShape是其他三个类的父类。MyShape为抽象类&#xff0c;包括图形位置的四个坐标&#xff1b;一个无参的构造方法&#xff0c;将所有的坐标设置为0&#xff1b;一个带参的构造函数&#xff0…...

java 读写文件的代码。

java 读写文件的代码。 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStr…...

如何使用贝锐花生壳内网穿透远程访问JupyterNotebook?

在数据科学领域&#xff0c;Jupyter Notebook 已成为处理数据的必备工具。 其用途包括数据清理和探索、可视化、机器学习和大数据分析。Jupyter Notebook的安装非常简单&#xff0c;如果你是小白&#xff0c;那么建议你通过安装Anaconda来解决Jupyter Notebook的安装问题&#…...

文本向量化

文本向量化表示的输出比较 import timeimport torch from transformers import AutoTokenizer, AutoModelForMaskedLM, AutoModel# simcse相似度分数 def get_model_output(model, tokenizer, text_str):"""验证文本向量化表示的输出:param model: 模型的…...

java--贪吃蛇

import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.Random;public class Snake extends JFrame implements KeyListener, ActionListener, MouseListener {int slong 2;//蛇当前长度//蛇坐标int[] Snakex new int[100];int[] Snakey new…...

录制第一个jmeter性能测试脚本2(http协议)

我们手工编写了一个测试计划&#xff0c;现在我们通过录制的方式来实现那个测试计划。也就是说‘’测试计划目标和上一节类似&#xff1a;让5个用户在2s内登录webtour&#xff0c;然后进入 页面进行查看。 目录 一.性能测试脚本录制的原理 二、性能测试脚本录制的实操&#…...

pip命令大全

pip命令手册 原版 Usage: pip <command> [options]Commands:install Install packages.download Download packages.uninstall Uninstall packages.freeze Output installed packages…...

Redis篇---第二篇

系列文章目录 文章目录 系列文章目录前言一、为什么 使用 Redis 而不是用 Memcache 呢?二、为什么 Redis 单线程模型效率也能那么高?三、说说 Redis 的线程模型前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这…...

【LeetCode刷题日志】232.用栈实现队列

&#x1f388;个人主页&#xff1a;库库的里昂 &#x1f390;C/C领域新星创作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;LeetCode 刷题日志&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;…...

单元测试实战(二)Service 的测试

为鼓励单元测试&#xff0c;特分门别类示例各种组件的测试代码并进行解说&#xff0c;供开发人员参考。 本文中的测试均基于JUnit5。 单元测试实战&#xff08;一&#xff09;Controller 的测试 单元测试实战&#xff08;二&#xff09;Service 的测试 单元测试实战&#x…...

LabVIEW和NIUSRP硬件加快了认知无线电开发

LabVIEW和NIUSRP硬件加快了认知无线电开发 对于电视频谱&#xff0c;主用户传输有两种类型&#xff1a;广播电视和节目制作和特殊事件(PMSE)设备。广播塔的位置已知&#xff0c;且覆盖电视传输塔&#xff08;复用器&#xff09;附近的某个特定地理区域&#xff08;称为排除区域…...

嵌入式软件工程师面试题——2025校招社招通用(十六)

说明&#xff1a; 面试群&#xff0c;群号&#xff1a; 228447240面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但…...

白盒测试之测试用例设计方法

白盒测试之测试用例设计方法 什么是白盒测试白盒测试的特点白盒测试的设计方法静态设计方法动态设计方法语句覆盖分支(判定)覆盖条件覆盖判定条件覆盖组合覆盖路径覆盖总结 什么是白盒测试 按照测试方法分类&#xff0c;测试可以分为白盒测试和黑盒测试两种。 白盒测试也称结构…...

在CentOS 7上关闭SELinux

要在CentOS 7上关闭SELinux&#xff0c;可以按照以下步骤进行操作&#xff1a; 临时关闭SELinux&#xff08;不建议使用&#xff09;&#xff1a; setenforce 0但是这种方式只对当前启动有效&#xff0c;重启系统后会失效。 2. 永久关闭SELinux&#xff1a; vi /etc/selinux…...

基于单片机温湿度PM2.5报警系统

**单片机设计介绍&#xff0c; 基于单片机温湿度PM2.5报警设置系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 单片机温湿度PM2.5报警设置系统是一种智能化的环境检测与报警系统。它主要由单片机、传感器、液晶显示屏、蜂鸣器…...

OpenHarmony系统编译环境

1. 推荐系统Ubuntu 2204 2. 必须安装的软件 apt-get install curl build-essential gcc g make ninja-build cmake libffi-dev e2fsprogs pkg-config flex bison perl bc openssl libssl-dev libelf-dev binutils binutils-dev libdwarf-dev u-boot-tools mtd-utils cpio de…...

二十三种设计模式全面解析-职责链模式(Chain of Responsibility Pattern):解放代码责任链,提升灵活性与可维护性

在软件开发中&#xff0c;我们经常面临处理请求或事件的情况。有时候&#xff0c;我们需要将请求或事件依次传递给多个对象进行处理&#xff0c;但又不确定哪个对象最终会处理它。这时候&#xff0c;职责链模式&#xff08;Chain of Responsibility Pattern&#xff09;就能派上…...

通过制作llama_cpp的docker镜像在内网离线部署运行大模型

对于机器在内网&#xff0c;无法连接互联网的服务器来说&#xff0c;想要部署体验开源的大模型&#xff0c;需要拷贝各种依赖文件进行环境搭建难度较大&#xff0c;本文介绍如何通过制作docker镜像的方式&#xff0c;通过llama.cpp实现量化大模型的快速内网部署体验。 一、llam…...

金融合规审核为何人力堆积却仍漏洞百出?2026年RegTech演进与Agent全链路闭环解决方案

在2026年的金融监管环境下&#xff0c;合规审核已不再是简单的“查漏补缺”&#xff0c;而是演变为一场高强度的算力与逻辑博弈。尽管金融机构在合规成本上的投入逐年攀升&#xff0c;甚至不惜以“人海战术”填补流程断点&#xff0c;但监管罚单的数额与频率却并未显著下降。这…...

新能源车轻量化为什么开始盯上高强镁合金?

续航&#xff0c;是悬在每一台纯电动汽车头上的达摩克利斯之剑。多充一度电、多堆一些正极材料&#xff0c;是一条路&#xff1b;但还有另一条路——把车造得更轻。 SAE&#xff08;美国汽车工程师学会&#xff09;的测算已经被反复引用&#xff1a;整车每减重100千克&#xff…...

OpenClaw用户如何快速接入Taotoken并开始Agent工作流

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 OpenClaw用户如何快速接入Taotoken并开始Agent工作流 对于使用OpenClaw框架构建AI智能体的开发者而言&#xff0c;快速接入稳定、多…...

基于MaixCam的延时摄影系统:从硬件选型到Python编程全解析

1. 项目概述&#xff1a;用MaixCam打造你的专属延时摄影工坊延时摄影&#xff0c;这个听起来有点专业、甚至带点“魔法”色彩的词&#xff0c;其实离我们并不遥远。想想看&#xff0c;把一朵花从含苞到绽放的几天时间&#xff0c;压缩成十几秒的惊艳绽放&#xff1b;或者把一座…...

DragonBones与Godot集成:骨骼动画的可编程化实践

1. 为什么在Godot里用DragonBones不是“锦上添花”&#xff0c;而是“绕不开的刚需” 去年上线一个横版动作手游Demo时&#xff0c;美术团队交来一套20个角色、每个角色含8套动画&#xff08;待机/跑动/跳跃/攻击/受击/死亡/闪避/必杀&#xff09;的Spine资源。我兴冲冲导入God…...

多智能体谈判系统:Agent 如何通过博弈达成最优交易价格?

多智能体谈判系统&#xff1a;Agent 如何通过博弈达成最优交易价格&#xff1f;关键词 多智能体系统、自动谈判、博弈论、纳什均衡、帕累托最优、双边/多边谈判、强化学习谈判、动态定价 摘要 想象一个没有人类中介的世界&#xff1a;电商平台上的智能客服自动和批发商砍价、供…...

企业内统一API网关与Taotoken聚合平台对接方案

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 企业内统一API网关与Taotoken聚合平台对接方案 在推进AI应用落地的过程中&#xff0c;许多中大型企业面临一个共同挑战&#xff1a…...

styled-theming 性能优化:如何避免主题切换时的性能瓶颈

styled-theming 性能优化&#xff1a;如何避免主题切换时的性能瓶颈 【免费下载链接】styled-theming Create themes for your app using styled-components 项目地址: https://gitcode.com/gh_mirrors/st/styled-theming styled-theming 是一个专为 styled-components …...

打造XBEE封装BLE112蓝牙模块:硬件设计、射频布局与调试全攻略

1. 项目概述&#xff1a;为什么我们需要一个“XBEE格式”的蓝牙模块&#xff1f;在嵌入式开发和物联网项目中&#xff0c;无线通信模块的选择往往决定了项目的成败。对于很多工程师和创客来说&#xff0c;Silicon Labs&#xff08;芯科科技&#xff09;的BLE112/113模块是蓝牙4…...

NanaZip:现代Windows文件压缩问题的终极解决方案

NanaZip&#xff1a;现代Windows文件压缩问题的终极解决方案 【免费下载链接】NanaZip The 7-Zip derivative intended for the modern Windows experience 项目地址: https://gitcode.com/gh_mirrors/na/NanaZip 还在为Windows文件压缩工具界面老旧、功能单一而烦恼吗&…...