拼图游游戏代码

一.创建新项目

二.插入图片

三.游戏的主界面

1.代码

package com.itheima.ui;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.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游戏的主界面//4.创建二维数组,用来管理数据int[][] data = new int[4][4];int x=0;int y=0;//定义一个变量,展示图片路径String path="images\\\\";//定义一个二维数组int[][] win = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,0}};int step=0;//创建选项下面的对象JMenuItem replayItem = new JMenuItem("重新游戏");JMenuItem reLoginItem = new JMenuItem("重新登入");JMenuItem closeItem = new JMenuItem("关闭游戏");JMenuItem accountItem = new JMenuItem("公众号");public GameJFrame() {//设置宽高this.setSize(640, 700);//设置界面的标题this.setTitle("拼图单机版1.0");//设置界面置顶this.setAlwaysOnTop(true);//设置界面居中this.setLocationRelativeTo(null);//设置关闭模式this.setDefaultCloseOperation(3);//取消默认中间放置this.setLayout(null);//监听事件this.addKeyListener(this);//初始化菜单//创建菜单对象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);//初始化数据initData();//初始化图片initImage();//显示this.setVisible(true);}//初始化数据private void initData() {//1.定义一维数组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;}data[i /4][i%4] = tempArr[i];}}//初始化图片//添加图片
private void initImage() {//清空原本已经出现的所有图片this.getContentPane().removeAll();if(victory()) {JLabel winJLabel = new JLabel(new ImageIcon("C:\\Users\\徐梦\\Desktop\\images\\s.png"));winJLabel.setBounds(60, 59, 500, 500);this.getContentPane().add(winJLabel);}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];JLabel jLabel = new JLabel(new ImageIcon(path+num+".gif"));//创建一个图片JLabel对象(管理容器)//指定图片位=位置jLabel.setBounds(151 * j+10, 121 *i+110, 151, 121);//添加边框0/1都可以jLabel.setBorder(new BevelBorder(1));//把管理容器添加到界面中this.getContentPane().add(jLabel);}}this.getContentPane().repaint();}
@Override
public 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("C:\\Users\\徐梦\\Desktop\\images\\all.png"));all.setBounds(10, 110, 603, 485);this.getContentPane().add(all);//刷新界面this.getContentPane().repaint();}
}
@Override
public void keyReleased(KeyEvent e) {//判断游戏是否胜利if(victory()) {return;}//对上下左右进行判断int 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("向上");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++;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},{5,6,7,8},{9,10,11,12},{13,14,15,0}};initImage();
}}
public  boolean victory() {for(int i=0;i<data.length;i++) {for(int j=0;j<data[i].length;j++) {if(data[i][j] != win[i][j]) {return false;}}}return true;}@Override
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("公众号");}}
}

2.程序的启动入口

package com.itheima.ui;
public class App {public static void main(String[] args) {// TODO Auto-generated method stub
//程序的启动入口//想要开启谁的界面,就创建谁的对象new GameJFrame();}}

3.结果

 

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

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

相关文章

pnpm : 无法加载文件 E:\Soft\PromSoft\nodejs\node_global\pnpm.ps1,

pnpm : 无法加载文件 E:\Soft\PromSoft\nodejs\node_global\pnpm.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中 的 about_Execution_Policies。 所在位置 行:1 字符: 1pnpm -v~~~~ CategoryI…

Django 入门学习总结6 - 测试

1、介绍自动化测试 测试的主要工作是检查代码的运行情况。测试有全覆盖和部分覆盖。 自动测试表示测试工作由系统自动完成。 在大型系统中&#xff0c;有许多组件有很复杂的交互。一个小的变化可能会带来意想不到的后果 测试能发现问题&#xff0c;并以此解决问题。 测试驱…

FPGA实现平衡小车(文末开源!!)

FPGA平衡小车 一. 硬件介绍 底板资源: TB6612电机驱动芯片 * 2 MPU6050陀螺仪 WS2812 RGB彩色灯 * 4 红外接收头 ESP-01S WIFI 核心板 微相 A7_Lite Artix-7 FPGA开发板 电机采用的是平衡小车之家的MG310(GMR编码器)电机。底板上有两个TB6612芯片&#xff0c;可以驱动…

C++设计模式——单例模式

单例设计模式 应用场景特点设计模式分类懒汉设计模式饿汉设计模式使用编写的测试代码运行结果 应用场景 当多个类都需要调用某一个类的一些公共接口&#xff0c;同时不想创建多个该类的对象&#xff0c;可以考虑将该类封装为一个单例模式。 特点 单例模式的特点&#xff1a;…

UnitTest框架

目标&#xff1a; 1.掌握UnitTest框架的基本使用方法 2.掌握断言的使用方法 3.掌握如何实现参数化 4.掌握测试报告的生成 1.定义 &#xff08;1&#xff09;框架(framework)&#xff1a;为解决一类事情的功能集合。&#xff08;需要按照框架的规定(套路) 去书写代码&…

echarts 横向柱状图示例

该示例有如下几个特点&#xff1a; ①实现tooltip自定义样式&#xff08;echarts 实现tooltip提示框样式自定义-CSDN博客&#xff09; ②实现数据过多时滚动展示&#xff08;echarts 数据过多时展示滚动条-CSDN博客&#xff09; ③柱状图首尾展示文字&#xff0c;文字内容嵌入图…

Android Studio常见问题

Run一直是上次的apk 内存占用太大&#xff0c;导致闪退

R语言——taxize(第二部分)

taxize&#xff08;第二部分&#xff09; 3. taxize 文档中译3.10. classification&#xff08;根据类群ID检索分类阶元层级&#xff09;示例1&#xff1a;传递单个ID值示例2&#xff1a;传递多个ID值示例3&#xff1a;传递单个名称示例4&#xff1a;传递多个名称示例5&#xf…

SpringCloud -Token传递之Feign

目录 方法一 RequestHeader 方法二 使用Feign的Interceptor 步骤一 实现RequestInterceptor接口 步骤二&#xff1a;配置Feign 通常微服务对于用户认证信息解析有两种方案 在 gateway 就解析用户的 token 然后路由的时候把 userId 等相关信息添加到 header 中传递下去。在…

YOLOv5 配置C2模块构造新模型

&#x1f368; 本文为[&#x1f517;365天深度学习训练营学习记录博客 &#x1f366; 参考文章&#xff1a;365天深度学习训练营 &#x1f356; 原作者&#xff1a;[K同学啊] &#x1f680; 文章来源&#xff1a;[K同学的学习圈子](https://www.yuque.com/mingtian-fkmxf/zxwb4…

【Linux】Linux下的基础IO

❤️前言 大家好&#xff01;今天这篇博客和大家聊一聊关于Linux下的基础IO。 正文 在阅读本篇博客之前&#xff0c;请大家先回顾一下C语言文件操作的一些方法&#xff0c;这里可以看看我之前记录的一些内容&#xff1a; 【C语言】C语言成长之路之文件操作_MO_lion的博客-CSD…

【PyQt小知识 - 3】: QComboBox下拉框内容的设置和更新、默认值的设置、值和下标的获取

QComboBox 内容的设置和更新 from PyQt5.QtWidgets import * import sysapp QApplication(sys.argv)mainwindow QMainWindow() mainwindow.resize(200, 200) # 设置下拉框 comboBox QComboBox(mainwindow) comboBox.addItems([上, 中, 下])button QPushButton(更新, main…

Colab跑项目

这里写目录标题 Colab文件目录路径显示更改colab当前工作文件夹Colab挂载谷歌云盘colab使用命令&#xff08;从这开始看&#xff0c;前面no zuo no die)最紧要&#xff0c;首先&#xff0c;修改笔记本设置使用启用gpu![在这里插入图片描述](https://img-blog.csdnimg.cn/591a6c…

NAS层协议栈学习笔记

NAS(Non-Access Stratum)是无线网络中非接入层及包括移动性管理(MM)和会话管理(SM)协议 &#xff0c;在5G(NR)系统中连接管理(Connection Management)用于建立和释放UE与AMF之间的控制面(CP)信令连接。 5G中移动性管理是通过NAS信令在UE与核心网之间进行交互的&#xff0c;连接…

SpringBoot——静态资源及原理

优质博文&#xff1a;IT-BLOG-CN 一、使用 SpringBoot 的步骤 【1】创建SpringBoot应用&#xff0c;选中自己需要的模块。 【2】SpringBoot已经默认将这些场景配置好&#xff0c;只需要在配置文件中指定少量配置就可以运行起来。 【3】编写业务逻辑代码。 二、自动配置原理 …

面试鸭 - 专注于面试刷题的网站

网上面试题有很多&#xff0c;但此套面试题真实、原创、高频&#xff0c;全网最强。 题目涵盖大中小公司&#xff0c;真实靠谱&#xff0c;有频率和难度的标记&#xff0c;助你成为Offer收割机。 面试鸭地址&#xff1a;https://mianshiya.skyofit.com/ 本套题是我原创&…

Chrome添加扩展程序

Crx4Chrome 下载crx 打开扩展程序 如果拖动crx文件到扩展程序提示只能通过Chrome应用商店添加此项内容 修改crx文件后缀为zip并解压&#xff0c;再拖动到扩展程序

Django(九、choices参数的使用、多对多表的三种创建方式、Ajax技术)

文章目录 一、choices参数choices参数的用法choices 参数用法总结 二、MVC与MTV模式1.MVC2.MTV 三、多对多的三种创建方式1.全自动创建2.纯手动创建半自动创建 四、Django与Ajax1.什么是Ajax常见的场景Ajax案例 一、choices参数 在没有用到choices参数之前&#xff0c;我们在D…

UI原型图

最近没啥项目&#xff0c;闲来无事&#xff0c;研究了一下原型图&#xff0c;万一以后年龄大了&#xff0c;代码敲不动还可以画画原型图&#xff0c;嘿嘿嘿 今天研究了两款画原型图的工具&#xff0c;即时设计-即时设计 - 可实时协作的专业 UI 设计工具 MODAO-墨刀 两款工具…