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

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 {//表示登录界面&#xff0c;以后所有跟登录相关的都写在这里public LoginJFrame() {//设置界面的长和宽this.setSize(603,680);//设置界面的标题this.setTitle("拼图登陆界面");//设置界面置顶this.setAlwaysOnTop(true);/…...

Linux Shell批量测试IP连通性

Linux 通过Shell脚本来实现读取txt文件中的IP地址&#xff0c;并使用telnet对其后的所有端口进行测试&#xff0c;判断是否可以连接。每个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进行备份 激活对应的虚拟环境&#xff0c;切换到桌面或者想备份的位置。 备份即可&#xff1a; pip freeze > requirements.txt如何安装备份&#xff1f; pip install -r requirements.txt2.使用conda进行备份 激活对应的虚拟环境&#xff0c;切换到桌面或者想…...

自动化与高效设计:推理技术在FPGA中的应用

想象一下&#xff0c;你正在设计一个复杂的电路系统&#xff0c;就像在搭建一座精巧的积木城堡。你手头有各种形状和功能的积木块&#xff0c;这些积木块可以组合成任何你需要的结构。在这个过程中&#xff0c;你有两种主要的方法&#xff1a;一种是手动挑选和搭建每一块积木&a…...

对react模块和模块化理解

在React开发中&#xff0c;模块化和React模块是两个紧密相关但又有区别的概念。理解它们对于构建高效、可维护的React应用至关重要。 模块化 模块化是一种将大型代码库拆分成更小、更易于管理的部分&#xff08;即模块&#xff09;的软件设计技术。每个模块都封装了特定的功能…...

CAN总线-----帧格式

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

UE网络同步(一) —— 一个项目入门UE网络同步之概念解释

最近在学习UE网络同步&#xff0c;发现了一个非常好的教程&#xff0c;并且附带了项目文件&#xff0c;这里从这个小项目入手&#xff0c;理解UE的网络同步 教程链接&#xff1a;https://www.youtube.com/watch?vJOJP0CvpB8w 项目链接&#xff1a;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++)

概述 在上一篇文章中&#xff0c;我们介绍了快速排序以及随机快速排序&#xff1a; 「数组」快速排序 / 随机值优化|小区间插入优化&#xff08;C&#xff09; 今天&#xff0c;我们来介绍归并排序。 相比于快速排序是冒泡排序融合了分治思想后形成的究极promax进化版&…...

颠覆传统 北大新型MoM架构挑战Transformer模型,显著提升计算效率

挑战传统的Transformer模型设计 在深度学习和自然语言处理领域&#xff0c;Transformer模型已经成为一种标准的架构&#xff0c;广泛应用于各种任务中。传统的Transformer模型依赖于一个固定的、按深度排序的层次结构&#xff0c;每一层的输出都作为下一层的输入。这种设计虽然…...

接口优化笔记

索引 添加索引 where条件的关键自动或者order by后面的排序字段可以添加索引加速查询 索引只能通过删除新增进行修改&#xff0c;无法直接修改。 # 查看表的索引 show index from table_name; show create table table_name; # 添加索引 alter table table_name add index …...

pandas 科学计数法显示

我注意到pandas中有一个问题&#xff0c; 默认情况下&#xff0c;就是其中的数据的小数位不能超过6位&#xff0c;比如0.0000007就会被显示为0&#xff0c;这个结果如下 全部以科学技术显示 import pandas as pd import numpy as np# 设置显示格式为科学计数法 pd.options.d…...

PHP正则替换字符串中的图片地址

在PHP中&#xff0c;可以使用preg_replace()函数来实现正则表达式的替换功能。以下是一个简单的例子&#xff0c;演示如何替换字符串中的图片地址。 double $str 图片地址1&#xff1a;<img src"http://example.com/image1.jpg"> 图片地址2&#xff1a;<i…...

基于多商户AI智能名片商城小程序的粉丝忠诚度提升策略:深度融合足额法则与多维度激励体系

摘要&#xff1a;在数字化浪潮的推动下&#xff0c;多商户AI智能名片商城小程序以其独特的商业模式和技术优势&#xff0c;正逐步成为连接商家与消费者&#xff0c;特别是粉丝群体的重要平台。本文深入探讨了如何通过深度融合足额法则与多维度激励体系&#xff0c;有效提升多商…...

BigDecimal高精度运算

1. BigDecimal是什么类型&#xff0c;为什么可以转为double BigDecimal 是 Java 中用于表示任意精度的十进制数的类。它主要用于金融和商业计算&#xff0c;能够提供比 double 类型更高精度的运算&#xff0c;特别是在处理货币等需要精确计算的场景中。 1.1 BigDecimal 的基…...

C/C++实现蓝屏2.0

&#x1f680;欢迎互三&#x1f449;&#xff1a;程序猿方梓燚 &#x1f48e;&#x1f48e; &#x1f680;关注博主&#xff0c;后期持续更新系列文章 &#x1f680;如果有错误感谢请大家批评指出&#xff0c;及时修改 &#x1f680;感谢大家点赞&#x1f44d;收藏⭐评论✍ 前…...

Unity音频管理器插件AudioToolKit

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

搜维尔科技:驾驶模拟器背后的技术: Varjo的虚拟/混合现实 (VR/XR)提供独特的优势,最终加快汽车开发创新的步伐

专业驾驶模拟器广泛应用于车辆开发&#xff0c;帮助汽车行业在开发过程的早期做出更好的设计决策。总体目标是为测试驾驶员提供最真实的驾驶体验&#xff0c;包括动态动作和声音&#xff0c;并测试控制算法或辅助系统等功能。环境越真实&#xff0c;驾驶员的体验就越接近最终车…...

OSL 冠名赞助Web3峰会 “FORESIGHT2024”圆满收官

OSL 望为香港数字资产市场发展建设添砖加瓦 &#xff08;香港&#xff0c;2024 年 8 月 13 日&#xff09;- 8 月 11 日至 12 日&#xff0c; 由 香港唯一专注数字资产的上市公司 OSL 集团&#xff08;863.HK&#xff09;冠名赞助&#xff0c;Foresight News、 Foresight Ventu…...

LeetCode 3148.矩阵中的最大得分:每个元素与其左或上元素之差的最大值(原地修改O(1)空间)

【LetMeFly】3148.矩阵中的最大得分&#xff1a;每个元素与其左或上元素之差的最大值&#xff08;原地修改O(1)空间&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/maximum-difference-score-in-a-grid/ 给你一个由 正整数 组成、大小为 m x n 的矩阵 g…...

主流的开源大型语言模型

本期我们来聊聊目前主流的开源大型语言模型。这些模型就像是AI界的超级英雄&#xff0c;各具特色&#xff0c;为我们的研究和开发提供了强大的力量。&#x1f680; GPT-Neo&#xff1a;这是EleutherAI的杰作&#xff0c;它模仿了OpenAI的GPT-3。GPT-Neo虽然规模小一些&#xf…...

【自动驾驶】话题通信

目录 构建发布者构建订阅者编写lanch文件自动启动节点测试运行ROS的目录结构 切换到工作空间的src目录下&#xff1a; 构建发布者 catkin_create_pkg publisher std_msgs rospy roscpp编写发布者程序&#xff1a; // 1.包含头文件 #include "ros/ros.h" #include &…...

【Linux】中的软件安装:深入探索RPM、SRPM与YUM

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Linux的起源与发展 2、RPM、SRPM与YUM的简要介…...

uniapp自定义请求头信息header

添加请求头&#xff1a;uniapp自定义请求头信息header&#xff0c;如下&#xff1a;添加tenant-id参数 代码...

SpringBoot整合Liquibase

1、是什么&#xff1f; Liquibase官网 Liquibase是一个开源的数据库管理工具&#xff0c;可以帮助开发人员管理和跟踪数据库变更。它可以与各种关系型数据库和NoSQL数据库一起使用&#xff0c;并提供多种数据库任务自动化功能&#xff0c;例如数据库迁移、版本控制和监控。Li…...

虚幻5|给武器添加碰撞检测与伤害

本章内容衔接上两章&#xff0c;需要完成上两章才能用本章内容 虚幻5|角色武器装备的数据库学习&#xff08;不只是用来装备武器&#xff0c;甚至是角色切换也很可能用到&#xff09;-CSDN博客虚幻5|普通攻击&#xff0c;使用接口更方便-CSDN博客 如有疑问&#xff0c;可访问…...

RESTful API设计指南:构建高效、可扩展的Web服务

目录 引言 一.RESTful API概述 二.设计原则 2.1. 资源导向 2.2. 使用标准的HTTP方法 2.3. 无状态通信 2.4. 可缓存响应 2.5. 分层系统 2.6. 按需加载代码&#xff08;可选&#xff09; 2.7. HATEOAS 三.最佳实践 3.1. 明确资源和子资源 3.2. 使用合适的HTTP状态码 …...

黑马头条vue2.0项目实战(九)——编辑用户资料

目录 1. 创建组件并配置路由 2. 页面布局 3. 展示用户信息 4. 修改昵称 5. 修改性别 6. 修改生日 7. 修改头像 7.1 图片上传预览 7.2 使用纯客户端的方式处理用户头像上传预览 7.3 头像裁切 7.4 纯客户端的图片裁切上传流程 7.5 Cropper.js 图片裁剪器的基本使用 …...

43.【C语言】指针(重难点)(F)

目录 15.二级指针 *定义 *演示 16.三级以及多级指针 *三级指针的定义 *多级指针的定义 17.指针数组 *定义 *代码 18.指针数组模拟二维数组 往期推荐 15.二级指针 *定义 之前讲的指针全是一级指针 int a 1; int *pa &a;//一级指针 如果写成 int a 1; int *pa &a…...