拼图游游戏代码

一.创建新项目

二.插入图片

三.游戏的主界面

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.rhkb.cn/news/199241.html

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

相关文章

深度学习中文汉字识别 计算机竞赛

文章目录 0 前言1 数据集合2 网络构建3 模型训练4 模型性能评估5 文字预测6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习中文汉字识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xf…

Redis非关系型数据库

非关系型数据库&#xff1a;nosql not only sql 不需要定义数据库&#xff0c;也不需要定义表的结构&#xff0c;直接记录即可&#xff0c;而且每条记录都可以有不同的数据类型&#xff0c;字段(字段个数) redis key:values 键值对形式储存。每个键之间没有直接关联&#xff0c…

右键菜单和弹出菜单的区别

接触windows开发10年了&#xff0c;一直以为"右键菜单"和"弹出菜单"是不同的。 最近刚刚发现&#xff0c;这两种菜单在定义的时候和消息循环处理程序中并没有什么不同&#xff0c;区别只是在于windows底层显示方式。 如下是右键菜单的显示方式&#xff1…

Vue3 函数式弹窗

运行环境 vue3vitetselement-plus 开发与测试 1. 使用h、render函数创建Dialog 建议可在plugins目录下创建dialog文件夹&#xff0c;创建index.ts文件&#xff0c;代码如下 import { h, render } from "vue";/*** 函数式弹窗* param component 组件* param opti…

网站被攻击怎么办?

网站被大流量攻击会造成服务器资源耗尽&#xff0c;一直到宕机崩溃&#xff0c;网站无法访问甚至被机房停用&#xff0c;时间长就导致网站排名下降&#xff0c;所以必需及时处理。下面跟大家分享服务器被大流量攻击怎么办&#xff1f;服务器攻击防护如何做&#xff1f; 一、服…

linux系统环境下mysql安装和基本命令学习

此篇文章为蓝桥云课--MySQL的学习记录 块引用部分为自己的实验部分&#xff0c;其余部分是课程自带的知识&#xff0c;链接如下&#xff1a; MySQL 基础课程_MySQL - 蓝桥云课 本课程为 SQL 基本语法及 MySQL 基本操作的实验&#xff0c;理论内容较少&#xff0c;动手实践多&am…

Spring Cloud Stream实践

概述 不同中间件&#xff0c;有各自的使用方法&#xff0c;代码也不一样。 可以使用Spring Cloud Stream解耦&#xff0c;切换中间件时&#xff0c;不需要修改代码。实现方式为使用绑定层&#xff0c;绑定层对生产者和消费者提供统一的编码方式&#xff0c;需要连接不同的中间…

AIGC ChatGPT 4 将数据接口文件使用Python进行入库Mysql

数据分析,数据处理的过程,往往将采集到的数据,或者从生产库过来的接口文件,我们都需要进行入库操作。 如下图数据: 将这样的数据接口文件,进行入库,插入到Mysql数据库中。 用Python代码来完成。 ChatGPT4来完成代码输入。 ChatGPT4完整内容如下: 这个任务可以使用`…

持续集成交付CICD:Jenkins通过API触发流水线

目录 一、理论 1.HTTP请求 2.调用接口的方法 3.HTTP常见错误码 二、实验 1.Jenkins通过API触发流水线 三、问题 1.如何拿到上一次jenkinsfile文件进行自动触发流水线 一、理论 1.HTTP请求 &#xff08;1&#xff09;概念 HTTP超文本传输协议&#xff0c;是确保服务器…

Flink(七)【输出算子(Sink)】

前言 今天是我写博客的第 200 篇&#xff0c;恍惚间两年过去了&#xff0c;现在已经是大三的学长了。仍然记得两年前第一次写博客的时候&#xff0c;当时学的应该是 Java 语言&#xff0c;菜的一批&#xff0c;写了就删&#xff0c;怕被人看到丢脸。当时就想着自己一年之后&…

OpenCV快速入门:直方图、掩膜、模板匹配和霍夫检测

文章目录 前言一、直方图基础1.1 直方图的概念和作用1.2 使用OpenCV生成直方图1.3 直方图归一化1.3.1 直方图归一化原理1.3.2 直方图归一化公式1.3.3 直方图归一化代码示例1.3.4 OpenCV内置方法&#xff1a;normalize()1.3.4.1 normalize()方法介绍1.3.4.2 normalize()方法参数…

SSH协议简介与使用

Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议&#xff0c;可有效弥补网络中的漏洞。通过SSH&#xf…

【封装UI组件库系列】搭建项目及准备工作

封装UI组件库系列第一篇搭建项目 前言 &#x1f31f;搭建项目 创建工程 基本结构 1.创建8个组件展示页面 ​ 2.配置路由文件router/index.js 3.页面布局 &#x1f31f;总结 前言 在前端开发中&#xff0c;大家可能已经用过各种各样的UI组件库了&#xff0c;现在市面上热…

单链表相关面试题--7.链表的回文结构

/* 解题思路&#xff1a; 此题可以先找到中间节点&#xff0c;然后把后半部分逆置&#xff0c;最近前后两部分一一比对&#xff0c;如果节点的值全部相同&#xff0c;则即为回文。 */ class PalindromeList { public:bool chkPalindrome(ListNode* A) {if (A NULL || A->ne…

Python---函数的嵌套(一个函数里面又调用了另外一个函数)

函数嵌套调用------就是一个函数里面又调用了另外一个函数。 基本语法&#xff1a; # 定义 函数B def funcB():print(这是funcB函数的函数体部分...)# 定义 函数A def funcA():print(- * 80) # 这一行为了更好区分print(这是funcA函数的函数体部分...)# 假设我们在调用funcA…

车载通信架构 —— 传统车内通信网络发展回顾

车载通信架构 —— 传统车内通信网络发展回顾 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何…

CentOS 7搭建Gitlab流程

目录 1、查询docker镜像gitlab-ce 2、拉取镜像 3、查询已下载的镜像 4、新建gitlab文件夹 5、在gitlab文件夹下新建相关文件夹 6、创建运行gitlab的容器 7、查看docker容器 8、根据Linux地址访问gitlab 9、进入docker容器&#xff0c;设置用户名的和密码 10、登录git…

2023.11.14 关于 Spring Boot 创建和使用

目录 Spring Boot Spring Boot 项目的创建 网页版创建 Spring Boot 项目 Spring Boot 目录说明 项目运行 Spring Boot Spring Boot 是基于 Spring 设计的一个全新的框架&#xff0c;其目的是用来简化 Spring 的应用、初始搭建、开发的整个过程Spring Boot 就是一个整合了…

前缀和(c++,超详细,含二维)

前缀和与差分 当给定一段整数序列a1,a2,a3,a4,a5…an; 每次让我们求一段区间的和&#xff0c;正常做法是for循环遍历区间起始点到结束点&#xff0c;进行求和计算&#xff0c;但是当询问次数很多并且区间很长的时候 比如&#xff0c;10^5 个询问和10^6区间长度&#xff0c;相…

Springboot框架中使用 Redis + Lua 脚本进行限流功能

Springboot框架中使用 Redis Lua 脚本进行限流功能 限流是一种用于控制系统资源利用率或确保服务质量的策略。在Web应用中&#xff0c;限流通常用于控制接口请求的频率&#xff0c;防止过多的请求导致系统负载过大或者防止恶意攻击。 什么是限流&#xff1f; 限流是一种通过…