Java学习笔记------拼图游戏

图形化界面GUI

GUI:Graphical User Interface(图像用户接口),指采用图形化的方式显示操作界面

两套体系:AWT包中和Swing包中

组件

JFrame:最外层的窗体

JMenuBar:最上层菜单

JLaber:管理文字和图片的容器

ImageIcon:图片

事件

可以被组件识别的操作

代码游戏界面

package cn.puzzlegame.ui;import javax.swing.*;
import javax.swing.border.BevelBorder;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;public class GameJFrame extends JFrame implements KeyListener {//创建二维数组用以管理数据int[][]date=new int[4][4];//定义变量,用来记录图片路径String path="C:\\Users\\33376\\IdeaProjects\\PuzzleGame\\素材\\image\\girl\\girl1\\";//定义一个储存正确的数组int[][]win=new int[][]{{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,0}};public GameJFrame(){//创建主界面creatGameJFrame();//创建菜单creatJmenuBar();//初始化数据(打乱)creatdate();//初始化图片createImage();//打开界面setVisible(true);}//记录空白块位置int x=0;int y=0;//记录步数int step=0;private void creatdate() {//创建数组int[]tem={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< tem.length;i++){int index=r.nextInt(tem.length);int temp=tem[i];tem[i]=tem[index];tem[index]=temp;}//添加到二维数组中for (int i = 0; i<tem.length;i++) {if(tem[i]==0){x=i/4;y=i%4;}else {date[i/4][i%4]=tem[i];}}}//初始化图片private void createImage() {//清空this.getContentPane().removeAll();//判断是否成功if (victory()){JLabel winJLabel=new JLabel(new ImageIcon("C:\\Users\\33376\\IdeaProjects\\PuzzleGame\\素材\\image\\win.png"));winJLabel.setBounds(203,283,197,73);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++){//创建ImageIcon对象//ImageIcon icon=new ImageIcon("C:\\Users\\33376\\IdeaProjects\\PuzzleGame\\素材\\image\\girl\\girl1\\1.jpg");//创建JLaber对象//JLabel jLabel=new JLabel(icon);//合并int number=date[i][j];JLabel jLabel=new JLabel(new ImageIcon(path+number+".jpg"));//指定图片位置+38+134使图片整体位于中间jLabel.setBounds(105*j+83,105*i+134,105,105);//添加边框BevelBorder 0凸起 1凹陷jLabel.setBorder(new BevelBorder(BevelBorder.LOWERED));//添加到界面getContentPane().add(jLabel);}}//背景图片JLabel background=new JLabel(new ImageIcon("C:\\Users\\33376\\IdeaProjects\\PuzzleGame\\素材\\image\\background.png"));//设置背景图片位置background.setBounds(40,40,508,560);getContentPane().add(background);//刷新界面this.getContentPane().repaint();//创建ImageIcon对象//ImageIcon icon=new ImageIcon("C:\\Users\\33376\\IdeaProjects\\PuzzleGame\\素材\\image\\girl\\girl1\\1.jpg");//创建JLaber对象//JLabel jLabel=new JLabel(icon);//合并//JLabel jLabel=new JLabel(new ImageIcon("C:\\Users\\33376\\IdeaProjects\\PuzzleGame\\素材\\image\\girl\\girl1\\1.jpg"));//指定图片位置//jLabel.setBounds(0,0,105,105);//添加到界面//getContentPane().add(jLabel);}//创建菜单private void creatJmenuBar() {//初始化菜单JMenuBar jMenuBar=new JMenuBar();//主菜单JMenu functionJmenu=new JMenu("功能");JMenu ahoutJmenu=new JMenu("关于我们");JMenu rewardJmenu=new JMenu("打赏");//菜单下选项JMenuItem replayItem=new JMenuItem("重新游戏");JMenuItem reLoginItem=new JMenuItem("重新登录");JMenuItem chagepictureItem=new JMenuItem("更换图片");JMenuItem closeItem=new JMenuItem("关闭游戏");JMenuItem wechatItem=new JMenuItem("微信号");JMenuItem PaymentItem=new JMenuItem("收款码");//给条目绑定事件replayItem.addActionListener(this);reLoginItem.addActionListener(this);chagepictureItem.addActionListener(this);closeItem.addActionListener(this);//添加jMenuBar.add(functionJmenu);jMenuBar.add(ahoutJmenu);jMenuBar.add(rewardJmenu);functionJmenu.add(replayItem);functionJmenu.add(reLoginItem);functionJmenu.add(chagepictureItem);functionJmenu.add(closeItem);ahoutJmenu.add(wechatItem);rewardJmenu.add(PaymentItem);setJMenuBar(jMenuBar);}//创建游戏窗口private void creatGameJFrame() {//设置页面大小setSize(603,680);//设置标题setTitle("拼图游戏1.0");//设置页面置顶setAlwaysOnTop(true);//设置居中setLocationRelativeTo(null);//设置关闭setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//取消默认居中setLayout(null);//整个界面添加键盘监听事件this.addKeyListener(this);}@Overridepublic void keyTyped(KeyEvent e) {}//按下不松手调用@Overridepublic void keyPressed(KeyEvent e) {int code=e.getKeyCode();if(code==65){//按a显示完整图片//清空界面图片getContentPane().removeAll();//加载完整图片JLabel all=new JLabel(new ImageIcon(path+"all.jpg"));//设置 all大小,添加图片all.setBounds(83,134,420,420);getContentPane().add(all);//添加背景图片JLabel background=new JLabel(new ImageIcon("C:\\Users\\33376\\IdeaProjects\\PuzzleGame\\素材\\image\\background.png"));//设置背景图片位置background.setBounds(40,40,508,560);getContentPane().add(background);//刷新this.getContentPane().repaint();}}@Overridepublic void keyReleased(KeyEvent e) {//判断游戏是否胜利if(victory()){return;}//判断上下左右int code =e.getKeyCode();//左37,右39,上38,下40,a65,w87if(code==37){if(y==3){return;}date[x][y]=date[x][y+1];date[x][y+1]=0;y++;step++;createImage();} else if (code==38) {if(x==3){return;}date[x][y]=date[x+1][y];date[x+1][y]=0;x++;step++;createImage();} else if (code==39) {if(y==0){return;}date[x][y]=date[x][y-1];date[x][y-1]=0;y--;step++;createImage();}else if(code==40){if(x==0){return;}date[x][y]=date[x-1][y];date[x-1][y]=0;x--;step++;createImage();} else if (code==65) {createImage();} else if (code==87) {//创建新二维数组,一键通过date=new int[][]{{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,0}};createImage();}}//判断是否与win数组数据相同public boolean victory(){for(int i=0;i< 4;i++){for (int j=0;j< 4;j++){if(date[i][j]!=win[i][j])//一个不同即失败{return false;}}}return true;}}

效果:

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

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

相关文章

java继承,接口,抽象类

目录 目录 1 继承的含义 2 继承的好处 3使类与类之间产生了关系。 看这里继承-------我的理解 代码部分 接口 代码 抽象类 代码 各位友友们大家好呀&#x1f60a;&#xff01; 今天让我们继续回顾java&#xff0c;看看java中的抽象类以及接口继承是什么&#x1f914…

如何精确计算 π ?

如何精确计算 π &#xff1f; 01 原本是要回顾一下第六章内容&#xff0c;也就是“间隔性重复”。但我已经迫不及待&#xff0c;想要知道如何精确计算 π &#xff0c;因此&#xff0c;我们快走一步&#xff0c;来探讨一下 π 的计算。 对于 π 的计算&#xff0c;我从学校时…

浪潮信息数据中心管理平台InManage升级发布 新增三大场景功能

在AIGC应用日益广泛的当下&#xff0c;浪潮信息聚焦AIGC在数据中心运维管理中面临的难题&#xff0c;进一步通过技术创新升级功能及体验&#xff0c;为AIGC的高效应用创造了良好的基础。近日&#xff0c;浪潮信息数据中心管理平台InManage升级发布&#xff0c;新增资产数字化管…

智慧城市的未来:利用数字孪生技术推动智慧城市的智能化升级

目录 一、引言 二、数字孪生技术概述 三、数字孪生技术在智慧城市中的应用 1、城市规划与建设 2、城市管理与运营 3、公共服务与民生改善 4、应急管理与灾害防控 四、数字孪生技术推动智慧城市的智能化升级的价值 1、提高城市管理的智能化水平 2、优化城市资源配置 …

答题pk小程序源码技术大解析

答题pk小程序源码解析 在数字化时代&#xff0c;小程序因其便捷性、即用性而受到广泛欢迎。其中&#xff0c;答题pk小程序更是成为了一种寓教于乐的现象。它不仅为用户提供了趣味性的知识竞技平台&#xff0c;还为企业、教育机构等提供了互动营销和知识传播的新途径。本文将对…

2024年品牌推广:构建品牌生态圈与注重品牌故事和文化传播

在全球经济深度融合、数字化浪潮汹涌澎湃的2024年&#xff0c;品牌推广的策略与模式正经历着前所未有的变革。在这一背景下&#xff0c;构建品牌生态圈和注重品牌故事与文化传播&#xff0c;成为了企业提升品牌竞争力和市场占有率的重要手段。 一、2024年市场经济分析与现状 …

遥感与ChatGPT:科研中的强强联合

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已逐渐渗透到各个领域&#xff0c;为传统行业带来了前所未有的变革。其中&#xff0c;遥感技术作为观测和解析地球的重要手段&#xff0c;正逐渐与AI技术相结合&#xff0c;为地球科学研究与应用提供了全新的…

【elasticsearch】ES的JAVA工具类完整版(待完成...)

springboot 的 elasticsearch 版本: 7.15.2 前情提要: 1.首先要理解 elasticsearch 对于【数据类型】很严格,如果字段类型不规范,在 检索/排序/聚合 时候类型不正确就会出现报错或者查不到数据的问题。所以在一般String类型插入结构如下: 这样的结构,不仅可以支持分词查…

基于SpringBoot的招聘网站

基于jspmysqlSpring的SpringBoot招聘网站项目&#xff08;完整源码sql&#xff09; 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》…

Elastic Stack--03--索引操作、文档操作、_cat

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1._cat/_cat/indices?v 查看所有的索引信息 2.索引操作索引就相当于我们讲的关系型数据库MySQL中的 database 2.1 创建索引PUT /索引名 2.2 查看索引信息GET /索引…

Java 容器启动执行指定任务

1、实现CommandLineRunner接口 实现CommandLineRunner接口&#xff0c;注意做初始化任务的类需要放在扫描路径下&#xff0c;使用Component注入到spring容器中。 import com.zw.service.StudentService; import org.springframework.beans.factory.annotation.Autowired; impo…

系统学习c++类和对象——深度理解默认成员函数

前言&#xff1a;类和对象是面向对象语言的重要概念。 c身为一门既面向过程&#xff0c;又面向对象的语言。 想要学习c&#xff0c; 首先同样要先了解类和对象。 本节就类和对象的几种构造函数相关内容进行深入的讲解。 目录 类和对象的基本概念 封装 类域和类体 访问限定符…

【Java设计模式】九、桥接模式

文章目录 0、背景1、模式2、案例3、使用场景 0、背景 现要创建不同的图形&#xff0c;图形的形状有圆、长方形、正方形&#xff0c;且它们有不同的颜色 两个维度在变&#xff0c;使用类的继承可以实现&#xff0c;也符合开闭原则&#xff0c;但会类爆炸。 1、模式 将抽象与…

Vue中的组件:构建现代Web应用的基石

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

GNN-Transformer新突破!全局与局部的完美融合

图神经网络&#xff08;GNN&#xff09;和Transformer的结合是近年来的研究热点。这类结合不仅能够让两者发挥各自的优势&#xff0c;还能推动模型的创新&#xff0c;提高处理图数据的效率和性能。 具体点讲&#xff0c;通过利用Transformer&#xff0c;我们可以扩展GNN的感受…

Python办公自动化之PDF(二)

Python操作PDF二 1、PyMuPDF简介2、 1、PyMuPDF简介 PyMuPDF&#xff08;也称Fitz&#xff09;开源&#xff0c;提供了一整套用于处理PDF文件的综合工具。使用PyMuPDF&#xff0c;用户可以高效地执行打开PDF、提取文本、图像和表格、操作旋转和裁剪等页面属性、创建新PDF文档以…

Mapbox添加model图层

贴个群号 WebGIS学习交流群461555818&#xff0c;欢迎大家 效果图 源码 经常关注mapbox的朋友会发现&#xff0c;3.0版本之后&#xff0c;mapbox的api里更新了一个model图层 但是呢&#xff0c;却没有提供model有关的api&#xff0c;让我们摸不着头脑&#xff0c;到底该如…

最新基于R语言lavaan结构方程模型(SEM)技术

原文链接&#xff1a;最新基于R语言lavaan结构方程模型&#xff08;SEM&#xff09;技术https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247596681&idx4&sn08753dd4d3e7bc492d750c0f06bba1b2&chksmfa823b6ecdf5b278ca0b94213391b5a222d1776743609cd3d14…

【C++庖丁解牛】模拟实现STL的string容器(最后附源码)

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1.vs和g下string结构…

librtmp交叉编译

目录 软件包下载 libopenssl编译 libz编译 librtmp编译 软件包下载 librtmp依赖openssl库和zlib库&#xff0c;注意openssl库版本需要为1.0&#xff0c;三个库下载地址如下&#xff1a; openssl:https://www.openssl.org/source/old/1.0.0/openssl-1.0.0s.tar.gz zlib:h…