java之拼图小游戏(开源)
public class LoginJFrame extends JFrame {//表示登录界面,以后所有跟登录相关的都写在这里public LoginJFrame() {//设置界面的长和宽this.setSize(603,680);//设置界面的标题this.setTitle("拼图登陆界面");//设置界面置顶this.setAlwaysOnTop(true);//设置界面居中this.setLocationRelativeTo(null);//设置游戏的关闭模式this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//这里是开启和关闭图形化界面的this.setVisible(true);} }
public class RegisterJFrame extends JFrame {//注册界面,以后跟注册相关的都写在这里public RegisterJFrame() {//设置界面的长和宽this.setSize(603,680);//设置界面的标题this.setTitle("拼图注册界面");//设置界面置顶this.setAlwaysOnTop(true);//设置界面居中this.setLocationRelativeTo(null);//设置游戏的关闭模式this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//这里是开启和关闭图形化界面的this.setVisible(true);} }
public class GameJFrame extends JFrame implements KeyListener {//创建一个二维数组int[][] data = new int[4][4];//记录空白方块在二维数组中的位置int x=0;int y=0;//把地址路径改为变量String path="..\\Day03\\out\\image\\animal\\";//定义变量用来统计步数int step=0;//JFrame 界面,窗体//跟游戏相关的都写在这个界面public GameJFrame() {//初始化界面initJFrame();//初始化菜单initJMenuBar();//初始化数据(打乱)initdata();//初始化图片(根据打乱之后的数据来加载图片)initImage();//这里是开启和关闭图形化界面的this.setVisible(true);}//定义一个二维数组,存储正确的数据int[][] win={{1,2,3,4},{6,7,8,9},{11,12,13,10},{14,15,0,5}};//初始化数据(打乱)private void initdata() {//需求://把一个一维数组的数据:0~15打乱顺序//然后再按照4个一组的方式添加到二维数组当中//定义一个一维数组int[] tempArr = {0,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[i];tempArr[i] = tempArr[index];tempArr[index] = temp;}//遍历数组for (int i = 0; i < tempArr.length; i++) {if (tempArr[i] == 0){x=i/4;y=i%4;}else{data[i/4][y%4]=tempArr[i];}}//给二维数组添加数据//遍历二维数组,给里面每一个数据赋值int index = 0;for (int i = 0; i < data.length; i++) {for (int j = 0; j < data[0].length; j++) {data[i][j] = tempArr[index];index++;}}}//初始化图片private void initImage() {//清空原本已经出现的图片this.getContentPane().removeAll();if (victory()) {//显示的胜利的图标JLabel winlabel = new JLabel(new ImageIcon("C:\\Users\\Administrator\\IdeaProjects\\Day03\\out\\image\\animal1\\victory.png"));winlabel.setBounds(203,253,250,200);this.getContentPane().add(winlabel);}JLabel stepCount=new JLabel("步数:"+step);stepCount.setBounds(50,30,100,20);this.getContentPane().add(stepCount);// 细节:先加载的图片在上边,后加载的图片在下边for (int i = 0; i < 4; i++) {for (int j= 0; j < 4; j++) {int num=data[i][j];//创建一个JLable的对象(管理容器)JLabel label=new JLabel(new ImageIcon(path+num+".png"));//指定图片的位置label.setBounds(50*j+200,50*i+200 ,50,50);//给图片添加边框//0:表示让图片凸起来//1:表示让图片凹下去label.setBorder(new BevelBorder(BevelBorder.LOWERED));//把管理容器放到界面当中this.getContentPane().add(label);}}//添加背景图片JLabel background = new JLabel(new ImageIcon("..\\Day03\\out\\image\\animal1\\background.png"));background.setBounds(40, 40 , 508,560);//把背景图片添加到界面当中this.getContentPane().add(background);//刷新一下界面this.getContentPane().repaint();}//初始化菜单private void initJMenuBar() {//初始化菜单//创建整个菜单对象JMenuBar menuBar = new JMenuBar();//创建菜单上面的俩个选项的对象 (功能 关于我们)JMenu functionJMenu = new JMenu("功能");JMenu aboutJMenu = new JMenu("关于我们");//创建选项下面的条目对象JMenuItem replayItem= new JMenuItem("重新游戏");JMenuItem reloginItem= new JMenuItem("重新登陆");JMenuItem closeItem= new JMenuItem("关闭游戏");JMenuItem accoutItem= new JMenuItem("公众号");//将每一个选项的条目添加到选项当中functionJMenu.add(replayItem);functionJMenu.add(reloginItem);functionJMenu.add(closeItem);//然后再把选项添加到菜单里面menuBar.add(functionJMenu);aboutJMenu.add(accoutItem);menuBar.add(aboutJMenu);//给整个界面去设置菜单this.setJMenuBar(menuBar);}// 初始化界面private void initJFrame() {//设置界面的长和宽this.setSize(603,680);//设置界面的标题this.setTitle("拼图单机版v1.0");//设置界面置顶this.setAlwaysOnTop(true);//设置界面居中this.setLocationRelativeTo(null);//设置游戏的关闭模式this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//取消默认的居中方式this.setLayout(null);//给整个界面添加键盘监听事件this.addKeyListener(this);}@Overridepublic void keyTyped(KeyEvent e) {}@Override//按下不松时候,可以调用这个方法public void keyPressed(KeyEvent e) {int code=e.getKeyCode();if(code==65){//把界面中所有的图片删除this.getContentPane().removeAll();//加载第一张完整的图片JLabel all=new JLabel(new ImageIcon(path+"all.png"));all.setBounds(100,100,400,400);this.getContentPane().add(all);//加载背景图片JLabel background = new JLabel(new ImageIcon("..\\Day03\\out\\image\\animal1\\background.png"));background.setBounds(40, 40 , 508,560);//把背景图片添加到界面当中this.getContentPane().add(background);this.getContentPane().repaint();}}@Override//松开按键的时候,可以调用这个方法public void keyReleased(KeyEvent e) {if (victory()) {return;}//对上下左右进行判断//左:37,上:38,右:39,下:40int code=e.getKeyCode();if(code==37){if(y==3){//表示空白方块已经在最下方了,他的下面没有图片能移动了return;}System.out.println("向左移动");data[x][y]=data[x][y+1];data[x][y+1]=0;y++;//每移动一次,计数器就自增一次step++;initImage();}else if(code==38){System.out.println("向上移动");if (x==3){//表示空白方块已经在最下方了,他的下面没有图片能移动了return;}//逻辑:把空白方块下方的的数字向上移动//x,y表示空白方块//x+1,y表示空白方块下方的数字//把空白下方的数字赋值给空白方块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++;initImage();}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},{6,7,8,9},{11,12,13,10},{14,15,0,5}};initImage();}}//判断data里面的数据看是否跟win数据相同//如果相同就返回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 true;} }
相关文章:

java之拼图小游戏(开源)
public class LoginJFrame extends JFrame {//表示登录界面,以后所有跟登录相关的都写在这里public LoginJFrame() {//设置界面的长和宽this.setSize(603,680);//设置界面的标题this.setTitle("拼图登陆界面");//设置界面置顶this.setAlwaysOnTop(true);/…...
Linux Shell批量测试IP连通性
Linux 通过Shell脚本来实现读取txt文件中的IP地址,并使用telnet对其后的所有端口进行测试,判断是否可以连接。每个IP地址的端口测试时间限制为5秒。 IP文件 : ips.txt 192.168.1.1 22,80,443 192.168.1.2 21,25,110 192.168.1.3 8080每一行包含一个IP地…...
已解决:anaocnda如何备份环境与安装环境
1.使用pip进行备份 激活对应的虚拟环境,切换到桌面或者想备份的位置。 备份即可: pip freeze > requirements.txt如何安装备份? pip install -r requirements.txt2.使用conda进行备份 激活对应的虚拟环境,切换到桌面或者想…...

自动化与高效设计:推理技术在FPGA中的应用
想象一下,你正在设计一个复杂的电路系统,就像在搭建一座精巧的积木城堡。你手头有各种形状和功能的积木块,这些积木块可以组合成任何你需要的结构。在这个过程中,你有两种主要的方法:一种是手动挑选和搭建每一块积木&a…...
对react模块和模块化理解
在React开发中,模块化和React模块是两个紧密相关但又有区别的概念。理解它们对于构建高效、可维护的React应用至关重要。 模块化 模块化是一种将大型代码库拆分成更小、更易于管理的部分(即模块)的软件设计技术。每个模块都封装了特定的功能…...

CAN总线-----帧格式
目录 前言 一、CAN总线帧格式分类 1.数据帧(重点) 2.遥控帧 3.错误帧 4.过载帧 5.间隔帧 二、位填充 三、波形实例 前言 本期我们就开始学习CAN总线的帧格式,对应帧格式的话,在前面我们学习I2C协议和SPI协议等协议的时候…...

UE网络同步(一) —— 一个项目入门UE网络同步之概念解释
最近在学习UE网络同步,发现了一个非常好的教程,并且附带了项目文件,这里从这个小项目入手,理解UE的网络同步 教程链接:https://www.youtube.com/watch?vJOJP0CvpB8w 项目链接:https://github.com/awforsyt…...

MATLAB中rsf2csf函数用法
目录 语法 说明 示例 将实数 Schur 形式变换为复数 Schur 形式 rsf2csf函数的功能是将实数 Schur 形式转换为复数 Schur 形式。 语法 [Unew,Tnew] rsf2csf(U,T) 说明 [Unew,Tnew] rsf2csf(U,T) 将实矩阵 X 的 [U,T] schur(X) 的输出从实数 Schur 形式变换为复数 Sc…...

Java基础 文字小游戏
souf System.out.printf("你好啊%s","张三") 输出你好啊张三 System.out.printn()放在中间可以换行 System.out.printf("%s你好啊%s","张三","李四") 输出 张三你好啊李四 只有输出没有换行效果。 制作一个文字小游戏…...
「数组」归并排序 / if语句优化|小区间插入优化(C++)
概述 在上一篇文章中,我们介绍了快速排序以及随机快速排序: 「数组」快速排序 / 随机值优化|小区间插入优化(C) 今天,我们来介绍归并排序。 相比于快速排序是冒泡排序融合了分治思想后形成的究极promax进化版&…...

颠覆传统 北大新型MoM架构挑战Transformer模型,显著提升计算效率
挑战传统的Transformer模型设计 在深度学习和自然语言处理领域,Transformer模型已经成为一种标准的架构,广泛应用于各种任务中。传统的Transformer模型依赖于一个固定的、按深度排序的层次结构,每一层的输出都作为下一层的输入。这种设计虽然…...

接口优化笔记
索引 添加索引 where条件的关键自动或者order by后面的排序字段可以添加索引加速查询 索引只能通过删除新增进行修改,无法直接修改。 # 查看表的索引 show index from table_name; show create table table_name; # 添加索引 alter table table_name add index …...
pandas 科学计数法显示
我注意到pandas中有一个问题, 默认情况下,就是其中的数据的小数位不能超过6位,比如0.0000007就会被显示为0,这个结果如下 全部以科学技术显示 import pandas as pd import numpy as np# 设置显示格式为科学计数法 pd.options.d…...
PHP正则替换字符串中的图片地址
在PHP中,可以使用preg_replace()函数来实现正则表达式的替换功能。以下是一个简单的例子,演示如何替换字符串中的图片地址。 double $str 图片地址1:<img src"http://example.com/image1.jpg"> 图片地址2:<i…...
基于多商户AI智能名片商城小程序的粉丝忠诚度提升策略:深度融合足额法则与多维度激励体系
摘要:在数字化浪潮的推动下,多商户AI智能名片商城小程序以其独特的商业模式和技术优势,正逐步成为连接商家与消费者,特别是粉丝群体的重要平台。本文深入探讨了如何通过深度融合足额法则与多维度激励体系,有效提升多商…...
BigDecimal高精度运算
1. BigDecimal是什么类型,为什么可以转为double BigDecimal 是 Java 中用于表示任意精度的十进制数的类。它主要用于金融和商业计算,能够提供比 double 类型更高精度的运算,特别是在处理货币等需要精确计算的场景中。 1.1 BigDecimal 的基…...

C/C++实现蓝屏2.0
🚀欢迎互三👉:程序猿方梓燚 💎💎 🚀关注博主,后期持续更新系列文章 🚀如果有错误感谢请大家批评指出,及时修改 🚀感谢大家点赞👍收藏⭐评论✍ 前…...

Unity音频管理器插件AudioToolKit
Unity音频管理器插件AudioToolKit 介绍AudioToolKit介绍具体用法总结 介绍 最近在自己写音频管理器的时候在网上发现了一款比较好用并且功能很全的一个音频管理插件,叫做AudioToolKit的插件。 如果需要的可以直接从我资源中找AudioToolKit。 AudioToolKit介绍 A…...

搜维尔科技:驾驶模拟器背后的技术: Varjo的虚拟/混合现实 (VR/XR)提供独特的优势,最终加快汽车开发创新的步伐
专业驾驶模拟器广泛应用于车辆开发,帮助汽车行业在开发过程的早期做出更好的设计决策。总体目标是为测试驾驶员提供最真实的驾驶体验,包括动态动作和声音,并测试控制算法或辅助系统等功能。环境越真实,驾驶员的体验就越接近最终车…...

OSL 冠名赞助Web3峰会 “FORESIGHT2024”圆满收官
OSL 望为香港数字资产市场发展建设添砖加瓦 (香港,2024 年 8 月 13 日)- 8 月 11 日至 12 日, 由 香港唯一专注数字资产的上市公司 OSL 集团(863.HK)冠名赞助,Foresight News、 Foresight Ventu…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...