拼图游游戏代码

一.创建新项目

二.插入图片

三.游戏的主界面

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…

数据结构【DS】栈的应用

描述一下如何实现括号匹配&#xff1f; 初始时栈为空。 从左往右遍历算术表达式中的每个括号元素&#xff1a; ①当遍历到左括号时&#xff0c;将其压入栈顶。 ②当遍历到右括号时&#xff0c;将栈顶元素出栈&#xff0c;并判断出栈的左括号与当前遍历的右括号是否匹配&…

杭电oj 2050 折线分割平面 C语言

#include<stdio.h>void main() {int c, n, i;long long sum;while (~scanf_s("%d", &c)){while (c--){scanf_s("%d", &n); sum 0;sum 2 * n * n - n 1;printf("%lld\n", sum);}} }

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/PTA】数组进阶练习(三)

本文结合PTA专项练习带领读者掌握数组&#xff0c;刷题为主注释为辅&#xff0c;在代码中理解思路&#xff0c;其它不做过多叙述。 目录 7-1 数组-排名查询7-2 数组-人数过半7-3 数组-数值插入7-4 数组-冒泡排序7-5 数组-删除元素7-6 数组-歌手得分7-7 数组-前K个成绩7-8 数组-…

TypeScript使用@来映射文件路径解决找不到模块“@/xxx”或其相应的类型声明的问题

TypeScript 使用 来映射文件路径解决找不到模块“/xxx”或其相应的类型声明的问题 环境&#xff1a;Vue3 Vite ts 想便捷引用自定义模块 由于在script中使用import { login } from "../../../net";这用每次都要查文件夹层数&#xff0c;所以想用直接映射src目录更…

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

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

UnitTest框架

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

c++ 获取当前时间(精确至秒、毫秒和微妙)

头文件 #include <chrono>三个概念 Duration&#xff08;时间段&#xff09; 概念 表示两个时间点之间的时间差。时间单位 小时&#xff08;hours&#xff09;&#xff1a;std::chrono::hours 分钟&#xff08;minutes&#xff09;&#xff1a;std::chrono::minutes…

Vue3 源码解读系列(十四)——内置组件

内置组件 问题&#xff1a;内置组件为什么不需要引入&#xff1f; 答&#xff1a;内置组件默认是全局引入的。 <Teleport> 定义 /*** Teleport 组件定义*/ const Teleport {__isTeleport: true,// 组件创建和更新process(nl, n2, container, anchor, parentComponent,…

echarts 横向柱状图示例

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

SpringCloud相关

文章目录 Gateway动态路由灰度策略 FeignRibbon SpringCloud五大组件分别对应&#xff08;1&#xff09;服务注册与发现&#xff08;2&#xff09;客服端负载均衡&#xff08;3&#xff09;断路器&#xff08;4&#xff09;服务网关&#xff08;5&#xff09;分布式配置 Gatewa…

力扣刷题第二十六天--二叉树

前言 昨天看总决赛&#xff0c;差距太大&#xff0c;看的没意思&#xff0c;真的是一点变通没有啊。难受&#xff0c;没有写题的状态了。大概率是最后一次看比赛了&#xff0c;青春已复过&#xff0c;白日忽相催。召唤师要和生活对线了。英雄们的语音&#xff0c;台词&#xf…

【LeetCode】1773. 统计匹配检索规则的物品数量

1773. 统计匹配检索规则的物品数量 难度&#xff1a;简单 题目 给你一个数组 items &#xff0c;其中 items[i] [typei, colori, namei] &#xff0c;描述第 i 件物品的类型、颜色以及名称。 另给你一条由两个字符串 ruleKey 和 ruleValue 表示的检索规则。 如果第 i 件物…

thonny的汉字编码是UTF-8,如何才能转为GB2312?

>>> chinese_str "你" >>> gb2312_str chinese_str.encode(GB2312) >>> print(gb2312_str) b\xe4\xbd\xa0 >>> print(chinese_str.encode(GB2312)) b\xe4\xbd\xa0 一个晚上了&#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…

【C++】传递‘类非静态成员函数’用作回调函数

在C语言中&#xff0c;传递函数指针是非常常见的操作。 在C语言中&#xff0c;使用C语言一致的方法传递全局函数指针&#xff0c;或者传递静态函数指针也很常见。 不过如果遇到想传递非静态成员函数时&#xff0c;可以参考以下示例代码。 #ifndef _WORKER_HPP_ #define _WOR…