java拼图游戏(待优化)

启动类

package com.yx.ui;public class App {
//启动入口public static void main(String[] args) {//如果想要开启一个界面,就创建谁的对象
//	new DengJFrame();	
//	new ZCJFrame();new GameJFrame();}}

游戏类

package com.yx.ui;import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;import javax.swing.ImageIcon;
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{//创建二维数组int[][]date=new int[4][4];//记录空白方块的位置int x=0;int y=0;//游戏界面,所有跟游戏有关的代码public GameJFrame() {//初始化界面jmian();//初始化菜单caidan();//初始化数据daluan();//初始化图片tupian();//展示出来this.setVisible(true);}//初始化数据(打乱)private void daluan() {//需求://把一个一维数组中的数据: 0~15 打乱顺序//然后再按照4个一组的方式添加到二维数组当中//定义一个一维数组int[]temp= {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<temp.length;i++) {//获取随机索引int x=r.nextInt(temp.length);//交换数据int temp1=temp[i];temp[i]=temp[x];temp[x]=temp1;}//给二维数组添加数据//遍历一维数组temp得到每个元素,将每个元素添加到二维数组中//i=0		0  0//i=1		0  1//i=2		0  2.....for(int i=0;i<temp.length;i++) {if(temp[i]==0) {x=i/4;y=i%4;}else {date[i/4][i%4]=temp[i];}}}//初始化图片private void tupian() {//清空图片this.getContentPane().removeAll();//先加载的图片在上方//把内循环执行4次for(int i=0;i<4;i++) {//一行添加4张图片for(int j=0;j<4;j++) {//获取图片序号int num=date[i][j];//创建JLabel对象(管理容器)JLabel jLabel=new JLabel(new ImageIcon("image/animal/animal3/"+num+".jpg"));//指定图片位置jLabel.setBounds(105*j+83, 105*i+134, 105, 105);//给图片添加边框jLabel.setBorder(new BevelBorder(1));//0让图片凸起来,1让图片凹下去//将管理容器添加到容器内this.getContentPane().add(jLabel);}}//添加背景JLabel ba=new JLabel(new ImageIcon("image/background.png"));ba.setBounds(40, 40, 508, 560);this.getContentPane().add(ba);//刷新界面this.getContentPane().repaint();}private void caidan() {//创建菜单对象JMenuBar cdan=new JMenuBar();//创建菜单上面两个选项对象(功能  关于我们)JMenu gn=new JMenu("功能");JMenu gywm=new JMenu("关于我们");//创建选项下面的条目对象JMenuItem cxyx=new JMenuItem("重新游戏");JMenuItem cxdr=new JMenuItem("重新登入");JMenuItem gbyx=new JMenuItem("关闭游戏");JMenuItem gzh=new JMenuItem("公众号");//将每一个选项下面的条目添加到选项中gn.add(cxyx);gn.add(cxdr);gn.add(gbyx);gywm.add(gzh);//将菜单里面的两个选项添加到菜单当中cdan.add(gn);cdan.add(gywm);//给整个界面设置菜单this.setJMenuBar(cdan);}private void jmian() {//设置窗体的宽高this.setSize(603,680);//标题this.setTitle("拼图游戏");//置顶this.setAlwaysOnTop(true);//居中this.setLocationRelativeTo(null);//关闭模式setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//取消默认的居中放置this.setLayout(null);//添加键盘事件this.addKeyListener(this);}public static void main(String[] args) {}@Overridepublic void keyTyped(KeyEvent e) {// TODO Auto-generated method stub}@Overridepublic void keyPressed(KeyEvent e) {// TODO Auto-generated method stub}@Overridepublic void keyReleased(KeyEvent e) {//上下左右进行判断int code=e.getKeyCode();if(code==38) {System.out.println("向上移动");if(x==3) {//表示空白方块已经在最下方了,他的下面没有图片在能移动了return;}//把空白方块下方的数字往上移动//x,y 表示空白方块//x+1,y表示空白方块的数字date[x][y]=date[x+1][y];date[x+1][y]=0;x++;tupian();}else if(code==40) {System.out.println("向下移动");if(x==0) {return;}//把空白方块上方的数字往下移动date[x][y]=date[x-1][y];date[x-1][y]=0;x--;tupian();}else if(code==37) {//把空白方块右方的数字往下移动System.out.println("向左移动");if(y==3) {return;}date[x][y]=date[x][y+1];date[x][y+1]=0;y++;tupian();}else if(code==39) {//把空白方块左方的数字往下移动System.out.println("向右移动");if(y==0) {return;}date[x][y]=date[x][y-1];date[x][y-1]=0;y--;tupian();}}}

展示

 

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

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

相关文章

嵌入式 Linux 移植与系统启动方法

1、Linux系统启动与U-Boot 所谓移植就是把程序代码从一种运行环境转移到另一种运行环境。对于内核移植来说&#xff0c;主要是从一种硬件平台转移到另一种硬件平台上运行。 体系结构级别的移植是指在不同体系结构平台上Linux内核的移植&#xff0c;例如&#xff0c;在ARM、MI…

Evil靶场

Evil 1.主机发现 使用命令探测存活主机&#xff0c;80.139是kali的地址&#xff0c;所以靶机地址就是80.134 fping -gaq 192.168.80.0/242.端口扫描 开放80&#xff0c;22端口 nmap -Pn -sV -p- -A 192.168.80.1343.信息收集 访问web界面 路径扫描 gobuster dir -u http…

ForkLift:macOS文件管理器/FTP客户端

ForkLift 是一款macOS下双窗口的文件管理器&#xff0c;可以代替本地的访达。ForkLift同时具备连接Ftp、SFtp、WebDav以及云服务器。 ForkLift还具备访达不具备的小功能&#xff0c;比如从文件夹位置打开终端&#xff0c;显示隐藏文件&#xff0c;制作替换等功能。ForkLift 是一…

解决k8s node节点报错: Failed to watch *v1.Secret: unknown

现象&#xff1a; 这个现象是发生在k8s集群证书过期&#xff0c;重新续签证书以后。 记得master节点的/etc/kubernetes/kubelet.conf文件已经复制到node节点了。 但是为什么还是报这个错&#xff0c;然后运行证书检查命令看一下&#xff1a; 看样子是差/etc/kubernetes/pki/…

八股文-TCP的四次挥手

TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的传输协议&#xff0c;它的连接的建立和关闭过程都是经过精心设计的。在TCP连接关闭时&#xff0c;使用四次挥手来保证数据的完整传输和连接的正常终止。 漫画TCP的四次挥手 第一次挥手&#…

redis安装(Windows和linux)

如何实现Redis安装与使用的详细教程 Redis 简介 Redis是一个使用C语言编写的开源、高性能、非关系型的键值对存储数据库。它支持多种数据结构&#xff0c;包括字符串、列表、集合、有序集合、哈希表等。Redis的内存操作能力极强&#xff0c;其读写性能非常优秀&#xff0c;且…

PyCharm:PyCharm新建.py文件时自动带出指定内容

在pycharm中加上指定内容&#xff0c;每次新建.py文件都会自动带出指定内容 操作&#xff1a; File—Setting—Editor----File and Code Templates--Python Script 在右侧窗口中加上如下信息 # encoding: utf-8 # author: Jeffrey # file: ${NAME}.py # time: ${DATE} ${TI…

ControlNet原理及应用

《Adding Conditional Control to Text-to-Image Diffusion Models》 目录 1.背景介绍 2.原理详解 2.1 Controlnet 2.2 用于Stable Diffusion的ControlNet 2.3 训练 2.4 推理 3.实验结果 3.1 定性结果 3.2 消融实验 3.3 和之前结果比较 3.4 数据集大小的影响 4.结…

聚观早报 |联想集团Q2财季业绩;小鹏汽车Q3营收

【聚观365】11月17日消息 联想集团Q2财季业绩 小鹏汽车Q3营收 微软发布两款自研AI芯片 FAA批准SpaceX再次发射星际飞船 2023 OPPO开发者大会 联想集团Q2财季业绩 全球数字经济领导企业联想集团公布截至2023年9月30日的2023/24财年第二财季业绩&#xff1a;整体营收达到10…

【ARM Trace32(劳特巴赫) 使用介绍 2.2 -- TRACE32 进阶命令之 DIAG 弹框命令】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 上篇文章&#xff1a;【ARM Trace32(劳特巴赫) 使用介绍 2.1 – TRACE32 Practice 脚本 cmm 脚本学习】 下篇文章&#xff1a;【ARM Trace32(劳特巴赫) 使用介绍 3 - trace32 访问运行时的内存】 文章目录 DIALOG.OK 命令DIA…

react之基于@reduxjs/toolkit使用react-redux

react之基于reduxjs/toolkit使用react-redux 一、配置基础环境二、使用React Toolkit 创建 counterStore三、为React注入store四、React组件使用store中的数据五、实现效果六、提交action传递参数七、异步状态操作 一、配置基础环境 1.使用cra快速创建一个react项目 npx crea…

持续集成交付CICD:Jenkins Sharedlibrary 共享库

目录 一、理论 1.共享库 2.共享库配置 3.使用共享库 4.共享库扩展 二、实验 1.连接共享库 2.使用共享库 三、问题 1.路径报错 2.readJSON 报错 一、理论 1.共享库 &#xff08;1&#xff09;概念 1&#xff09;共享库这并不是一个全新的概念&#xff0c;其实在编…

K-Means算法进行分类

已知数据集D中有9个数据点&#xff0c;分别是&#xff08;1,2&#xff09;&#xff0c;(2,3), (2,1), (3,1),(2,4),(3,5),(4,3),(1,5),(4,2)。采用K-Means算法进行聚类&#xff0c;k2&#xff0c;设初始中心点为&#xff08;1.1,2.2&#xff09;&#xff0c;&#xff08;2.3,3.…

【Web】PHP反序列化的一些trick

目录 ①__wakeup绕过 ②加号绕过正则匹配 ③引用绕过相等 ④16进制绕过关键词过滤 ⑤Exception绕过 ⑥字符串逃逸 要中期考试乐(悲) ①__wakeup绕过 反序列化字符串中表示属性数量的值 大于 大括号内实际属性的数量时&#xff0c;wakeup方法会被绕过 &#xff08;php5-p…

Ubuntu中apt-get update显示域名解析失败

第一步 检查主机->虚拟机能否ping成功 ping 红色框中的IPv4地址 能通&#xff0c;表示虚拟机ip配置成功;否则&#xff0c;需要先配置虚拟机ip 第二步 检查是否能ping成功百度网址 ping www.baidu.com 若不成功&#xff0c;可能原因 虚拟机没联网&#xff0c;打开火狐浏览器…

别再吐槽大学教材了,来看看这些网友强推的数学神作!

作者简介&#xff1a; 辭七七&#xff0c;目前大二&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

Python基础:正则表达式(regular expression)详解

在Python中&#xff0c;正则表达式是一种强大的工具&#xff0c;可用于匹配和操作字符串。什么是正则表达式&#xff1f; 正则表达式是一种模式匹配语言&#xff0c;用于匹配字符串中的特定模式。这些模式可以是字母、数字、字符组合或其他符号。正则表达式通常用于文本处理、网…

2023年优化算法之之霸王龙优化算法(TROA),原理公式详解,附matlab代码

霸王龙优化算法&#xff08;Tyrannosaurus optimization&#xff0c;TROA&#xff09;是一种新的仿生优化算法&#xff0c;该算法模拟霸王龙的狩猎行为&#xff0c;具有搜索速度快等优势。该成果于2023年发表在知名SCI期刊e-Prime-Advances in Electrical Engineering, Electro…

使用Lychee搭建个人图片存储系统并进行远程访问设置实现公网访问本地私人图床

文章目录 1.前言2. Lychee网站搭建2.1. Lychee下载和安装2.2 Lychee网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 图床作为图片集中存放的服务网站&#xff0c;可以看做是云存储的一部分&#xff0c;既可…

设计模式-行为型模式-策略模式

一、什么是策略模式 策略模式是一种行为设计模式&#xff0c;它允许在运行时选择算法或行为&#xff0c;并将其封装成独立的对象&#xff0c;使得这些算法或行为可以相互替换&#xff0c;而不影响使用它们的客户端。&#xff08;ChatGPT生成&#xff09; 主要组成部分&#xff…