java编程如何算圆的面具,Java实现人物拼图游戏│附代码

本文详细介绍了如何使用Java Swing实现一个3×3的拼图游戏。游戏开始时,图片被分割并随机排列,玩家需通过空位移动拼块以恢复原图。关键技术和步骤包括:使用JButton显示图片、图片按钮的移动、BufferedImage到ImageIcon的转换以及通过监听器处理用户交互。文章还提供了游戏界面截图和完整源代码获取方式。
摘要由CSDN通过智能技术生成

3d5b5a1f52f3ba494dbaeb19220f908b.png

拼图游戏指将一幅图片分割成若干拼块,并随机打乱顺序,当将所有拼块都放回原位置时就完成了拼图(游戏结束)。

01

游戏介绍

在游戏中,拼块以随机顺序排列,网格上有一个位置是空的。完成拼图的方法是利用这个空位置移动拼块,玩家通过单击空位置周围的拼块来交换它们的位置,直到所有拼块都回到原位置。拼图游戏的运行界面如图9.1所示。

a17d93bdcfa7fa3ba3e2c920e0626f87.png

▍图9.1拼图游戏的运行界面

02

程序设计的思路

在游戏中动态生成一个3×3的图片按钮数组cells。将图片woman.jpg分割成行、列数均为3的小图片,并按顺序编号;每个图片按钮显示一幅小图片,其位置成员place存储0~8的数,代表正确的位置编号。注意,最后一个图片按钮显示的是空白信息图片“9.jpg”,而位置成员place存储8。

在游戏开始时,随机打乱图片按钮数组cells,根据玩家的单击来交换图片按钮数组cells对应按钮与空白图片按钮的位置,通过判断图片按钮数组cells中所有元素的位置成员place是否有序来判断是否已经完成游戏。

03

关键技术

1

按钮显示图片的实现

Swing中的按钮可以显示图片(图像)。

JButton中显示图片的构造方法为

JButton(Icon icon),用来在按钮上显示图片。

JButton类的方法设置不同状态下按钮显示的图片。

setIcon(Icon defaultIcon):用来设置按钮在默认状态下显示的图片。

setRolloverIcon(Icon rolloverIcon):设置当鼠标指针移动到按钮上方时显示的图片。

setPressedIcon(Icon pressedIcon):设置当按钮被按下时显示的图片。

下面是一个控制鼠标指针移动到按钮上方及按钮被按下时显示不同图片的示例。

aee15d6bb44c0d9963368a2aa9ed507e.png

4016410b7672ddaa2039605fc2441064.png

程序运行结果如图9.2和图9.3所示。

01247318f3b85cc59fa195c42ea940d8.png

▍图9.2按钮被按下去时显示的图片

94aa3bee77b31533963389b3ae456136.png

▍图9.3鼠标滚动时显示的图片

2

图片按钮移动的实现

当图片按钮移动后,按钮的坐标发生改变,此操作通过setLocation方法实现。setLocation方法是从Component类继承的,其定义如下:

public void.setLocation(int x,int y)

其中,参数x是当前组件的左上角在父级坐标空间中新位置的x坐标,参数y是当前组件的左上角在父级坐标空间中新位置的y坐标。

3

从BufferedImage转化成ImageIcon

BufferedImage类是java.awt.Image的子类,在image的基础上增加了缓存功能。

ImageIcon类是一个Icon接口的实现,它根据Image绘制Icon,可使用URL、文件名或字节数组创建的图像。

从BufferedImage转化成ImageIcon只需要使用“ImageIcon im=new ImageIcon(BufferedImage实例)”。

另外,使用ImageIcon的Image getImage方法返回此图标的Image。

04

程序设计的步骤

项目组成如图9.4所示。

40f521f83c65d5b9870b7566aab1ba05.png

▍图9.4项目组成

1

设计单元图片类

创建名称为Cell的类,用于封装一个单元图片对象,此类继承JButton对象,并对JButton按钮组件进行重写,其代码如下:

d8aeae4e8cc5ca503114776857ece8a6.png

e5b86797e032092b728924a8f6472fb9.png

2

创建枚举类型

在项目中创建一个名称为Direction的枚举类型,用于定义图片移动的4个方向。

896e144a0b69b8917ae5481ed2020a1b.png

3

设计游戏面板类

在项目中创建一个名称为GamePanel的类,此类继承JPanel类,实现MouseListener接口,用于创建游戏面板对象。在GamePanel类中定义长度为9个单元的图片数组对象cells,并通过init方法对所有单元图片对象进行实例化。

9dce1e4b005fd611c522c8334c12a37b.png

构造方法GamePanel调用init对所有单元图片对象进行实例化。在对单元图片对象进行实例化时可以直接用分割好的图片1.jpg~9.jpg(如图9.5所示)实现,其中9.jpg为空白图片。

ac497f3378ea57c8f0060fec9345308b.png

▍图9.5拼图所用图片

单元图片对象直接用现成的分割好的图片进行实例化,代码如下:

e073958b016882beda34b5462d444c18.png

当然也可以不用现成的分割好的图片,使用BufferedImage类的getSubimage方法可以将一个大的图片woman.jpg任意分割成子图像。

d6d7a538a6e43deca3a798878a649159.png

在使用时先得到一幅原图片的长和宽,根据要求分块,算出每块的x、y坐标,这样就可以分割了。注意,分割出来的是BufferedImage对象,而按钮的图片需要ImageIcon类型,从BufferedImage转化成ImageIcon只需要使用ImageIcon im=new ImageIcon(BufferedImage对象)。

3afd7587a1cc37c6a59c7f1cd7ceea95.png

364f19c56bae1f95fd8a9cd21e3a767e.png

random对图片进行随机排序,产生两个随机数 m、n(0~8)作为被交换图片按钮数组 元素的下标,对调这两个被交换图片按钮的位置。

7484df108d0ad5b9510c7c0bdbc9093b.png

381d53c0e905efeaf5d5cee695ad194b.png

在图片块单击事件中,通过e.getSource获取触发事件的对象cell,与空白图片块cellBlank的位置进行比较,从而决定被单击对象cell和空白图片块cellBlank的移动方向。

9e686c7ae79f2a479169e8384458f0d3.png

isSuccess判断游戏是否成功,只需要判断图片块的原始位置cells[i].getPlace是否符合现在的位置,只要有一个单元图片的位置不正确就返回false,所有单元图片的位置都正确时返回true。

5b3fd91867a9ffe5418b2f470458710e.png

4

设计主窗口类

在项目中创建一个继承JFrame的MainFrame类,用于显示自定义游戏面板(GamePanel)。

6dcff9afba98ae81bae3965d346b1631.png

226a7b972ef134c1400ca995590ac9af.png

拼图游戏的总体设计情况如上,并没有很高深的内容,实现的核心在于对按钮数组的操作。拼图游戏成功的效果如图9.6所示。

e96245496137e83812b841c90d8c6b61.png

▍图9.6游戏成功的效果

关注微信公众号,后台回复关键词“Java人物拼图”即可获得完整源代码。

2f13803b689558a95b9b680b8ade3b21.png

本项目是一个基于SSM(Spring+SpringMVC+MyBatis)框架和Vue.js前端技术的大学生第二课堂系统,旨在为大学生提供一个便捷、高效的学习和实践平台。项目包含了完整的数据库设计、后端Java代码实现以及前端Vue.js页面展示,适合计算机相关专业的毕设学生和需要进行项目实战练习的Java学习者。 在功能方面,系统主要实现了以下几个模块:用户管理、课程管理、活动管理、成绩管理和通知公告。用户管理模块支持学生和教师的注册、登录及权限管理;课程管理模块允许教师上传课程资料、设置课程时间,并由学生进行选课;活动管理模块提供了活动发布、报名和签到功能,鼓励学生参与课外实践活动;成绩管理模块则用于记录和查询学生的课程成绩和活动参与情况;通知公告模块则实时发布学校或班级的最新通知和公告。 技术实现上,后端采用SSM框架进行开发,Spring负责业务逻辑层,SpringMVC处理Web请求,MyBatis进行数据库操作,确保了系统的稳定性和扩展性。前端则使用Vue.js框架,结合Axios进行数据请求,实现了前后端分离,提升了用户体验和开发效率。 该项目不仅提供了完整的源代码和相关文档,还包括了详细的数据库设计文档和项目部署指南,为学习和实践提供了便利。对于基础较好的学习者,可以根据自己的需求在此基础上进行功能扩展和优化,进一步提升自己的技术水平和项目实战能力。
本项目是一个基于SSM(Spring+SpringMVC+MyBatis)后端框架与Vue.js前端框架的个人健康信息管理系统。该项目旨在为个人提供一个便捷、高效的健康信息管理平台,通过该系统,用户可以轻松地记录、查询和分析自己的健康数据。 在技术选型上,后端采用了Spring框架进行依赖注入和事务管理,SpringMVC负责处理Web请求,MyBatis则用于数据库操作,实现了前后端的分离。前端则使用了Vue.js框架,结合Vue Router进行页面路由管理,以及Vuex进行状态管理,确保了用户界面的响应性和交互性。 系统的主要功能包括用户注册与登录、健康数据录入(如身高、体重、血压等)、健康数据查询与分析、健康建议推送等。用户可以通过系统直观地查看自己的健康趋势,并根据系统提供的建议调整生活习惯。 数据库设计方面,系统采用了关系型数据库MySQL,设计了用户表、健康数据表等,确保了数据的完整性和安全性。此外,项目还包含了详细的文档和论文资料,为使用者提供了完整的开发背景和技术实现细节。 对于计算机相关专业的毕设学生而言,该项目不仅提供了一个实际的应用场景,还涵盖了从需求分析到系统实现的完整开发流程,是一个理想的实践平台。对于Java学习者,该项目也是一个很好的实战练习,可以在理解现有代码的基础上,进一步探索和实现更多功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值