javaSwing扫雷

一、介绍

1.1 背景

在1964年 有一个叫“方 块”的游戏,这是扫雷最原始的版本。后来,这个游戏被改成了另一种游戏,叫做“Rlogic”。在这个游戏中,玩家扮演了一名军队的军人,接受了一项艰难的任务:为指挥中心探路。当然游戏不会这么简单,这条路上充满了地雷,玩家需要小心翼翼的探索出一条没有地雷的安全的道路,如果被雷炸死游戏就会结束。一年后,汤姆·安德森(Tom Anderson)在之前游戏的基础上又编写了一款新的游戏,这就是扫雷游戏。1979年, 两名工程师在计算机的操作系统上搭载了这款小游戏,从此以后扫雷游戏开始风靡全球。如今,越来越多的人喜爱上了这款简单易上手的小游戏,这个小游戏可以在任何时间在任何平台上进行游戏,让人可以在游戏中享受到乐趣并且还能在一定程度上锻炼玩家的思维能力。
扫雷这款游戏有着很长的历史,从扫雷被开发出来到现在进行了无数次的优化,这款游戏变得越来越让人爱不释手了,简单的玩法在加上一个好看的游戏界面,每一处的细节都体现了扫雷的魅力。所以本次的毕业设计我将开发一款扫雷游戏。
扫雷游戏深受大家的喜爱,本次的毕业设计也是迎合大家的喜欢,开发一款扫雷小游戏,同时也可以提高自己编程水平。

开发工具的选用及介绍

Eclipse是一款非常好用的编译软件,它也经历了很长时间的发展,并且是由许多公司联合开发的免费软件。2011年5月,公布稳 定版4.2;2012年4月公布代号为Ganymeode的4.3版;2013年5月公布代号为Galieleo的4.4版;2013年7月公布代号为Helomios的4.5版;2013年11月公布代号为Indigon的4.6版;2014年3月公布代号为Jiuno的5.1版;2014年7月公布代号为Keplere的5.2版;2015年3月公布代号为Lunam的5.3版;2015年8月公布代号为Marse的5.4版。
Eclipse是目前主流的编写代码的软件,可以支持预编译,在写代码的同时就能知道是否书写错误,而不用等到运行的时候才发现。原本这个软件只能编写Java语言,但是经过多年的开发设计出了许多的插件,将这些插件安装进去以后就可以编写其他语言了,这也就是他被大部分人所喜爱的原因。正是由于插件的使用,Eclipse变得很灵活,可以通过安装插件来实现原本没有的功能,让软件更加的便利。
Eclipse一开始是由两个团队联合设计开发出来的,由于该软件的强大功能使得许多公司纷纷加盟该项目联合开发。而且这个项目是开源的,任何人都能对其进行开发修改,这让Eclipse的名气愈来愈大,后来连甲骨文这种大公司都加入这个项目之中。这种免费的开发软件也很受许多公司的喜爱,通过安装插件可以使用各种语言。
Java语言是一种深受大家喜爱的语言,因为它是面向对象的,所以在理解了这种语言之后就会在代码的设计上有更深刻的理解。
如果没有JDK,你编写的Java代码是无法运行的,这是因为我们需要使用他自带的类库来帮助我们设计,由于不同的软件都可以编写代码,语言规范也就显得尤为重要,所以在开始编写代码之前一定要安装好JDK。
现在在网上是有着许许多多的JDK版本,其中以Sun公司发布的最好,其他公司也有开发并发布出来。有的在性能上甚至超过了Sun公司的JDK,有的则在在执行的效率上高于Sun公司的JDK。但是我们还是选择使用它的原因是因为它是最稳定的JDK,经过多年的开发和完善,是其他JDK所不能相比的。所以我们要熟练的运用它。

1.3 选题目的和意义

经历了大学四年的学习之后,我已经学习了一些关于设计和编程的理论知识,本次的毕业设计运用学过的知识编写一个扫雷小游戏,是对我平时学习成果的一次检验。在设计当中让我的知识在实践中融会贯通并得到提升,并且能发现许多平常发现不了的问题,期望能通过本次的毕业设计让我的能力再一次提高。这次毕设一定会让我收获许多,在今后的工作生涯中能轻松的胜任任何任务。

1.4 本文主要研究的内容

扫雷游戏风靡全球,受到很多人的喜爱。我研究了这个扫雷游戏之后,发现有两个关键点:
第一点是鼠标事件的处理,包括鼠标点击菜单项中按钮的事件,点击雷区中任意一格的事件,点击界面上按钮的事件等。
第二点是初始化雷区,包括随机生成雷的位置,界面的初始化,计算周围雷数等。
具体要求如下:
(1)扫雷游戏分为三种难度,分别是初、中、高级,点击游戏左上角的“游戏”菜单后会出现“初级”、“中级”、“高级”三种选项。除此之外玩家还可以自定义难度。
(2)在玩家选择难度之后游戏将会改变界面大小,并改变雷的总数。当玩家点开第一个格子时雷区开始布雷同时计时开始。
(3)若玩家想放弃本局游戏并重新开始的话,可以通过点击扫雷信息统计区中的按钮,来结束当前的游戏并开始新的游戏。
(4)当玩家认为某个格没有雷,可以直接用鼠标单击这个格或者把鼠标放在该格子上按下空格键。如果玩家的判断是正确的,则会显示周围8个格子中地雷的总数,如果玩家判断错误,该格子下藏着雷的话,游戏就好结束,系统自动弹框提示玩家失败。
(5)若玩家认为某个格下有雷,在该格子上鼠标右键就可以标记一个玩家认为该格是雷的图标,也就是在格子上标记一个小红旗的图案。玩家每标记一个红旗(不管玩家的判断正确与否),界面上的计数区都会把雷数减一。
(6)当所有的雷都标记正确后,游戏会自动弹框显示“您真厉害,请输入您的名字,记录上榜!”。
(7)若玩家在游戏过程中单击了有雷的格子,游戏失败并且记时停止,游戏会将剩余的雷全部显示出来,自动弹框显示“你输了,请继续努力!”,之后玩家可以开始一局新的游戏。
(8)如果玩家不清楚游戏玩法,可以点击菜单栏上的帮助来获取游戏玩法及游戏窍门。
(9)对于自定义难度,系统会有一个阈值,行数在9到16之间,列数在9到30之间,地雷数在10到99之间。如果玩家设置的值超过该阈值,系统会自动将超过的数值变成阈值。

二、需求分析

2.1 可行性分析

扫雷游戏是一款玩法简单的小游戏,无论是孩子还是老人,都可以在休息的时候玩上一局从而轻松而有效地舒缓压力。而且真正的扫雷高手还可以通过竞速(在最短的时间内完成扫雷)来感受乐趣。
(1)投资可行性:扫雷游戏所占内存少,可以搭载在任意平台,有投资的价值。
(2)财务可行性:从受益者的角度来看,不需太多的经费就能开发这款扫雷小游戏。
(3)组织可行性:制度可行的项目规划,做好人员的配给,保持组员间的良好沟通,定期开会讨论,确保项目能够准时交付。
(4) 经济可行性:可以给开发的企业创造效益,给社会增加工作岗位,并且提高人们的生活质量。
(5) 法律可行性:任何的产品都需要确保它没有触犯法律才能开始设计。但是扫雷游戏并不会触犯任何法律,而且不会和企业之间发生冲突。游戏的开发不会侵犯任何人的利益,也不会违法。
(6) 技术可行性:扫雷游戏的功能简单,只需稍有经验的开发人员就能轻易开发出来,所以技术方面不是太大的问题,主要需要明白扫雷的玩法才能更好的设计与实现该游戏。

2.2 扫雷游戏功能描述

游戏界面可以分为三个模块:菜单栏,游戏数据显示区域以及雷区。菜单栏包括游戏难度的选择和排行榜的查询以及游戏帮助。游戏数据显示区域包括地雷计数区、计时区和重新开始按钮。雷区就是玩家的游戏区域,当玩家在游戏过程中用鼠标点击某一模块,系统会自动作出相应的响应,这就是游戏中的鼠标事件。
当玩家点开第一个格子时雷区开始布雷同时计时开始。然后会在该格子上显示周围8个格子的雷数(如果没有雷则自动点开周围的格子),玩家就需要通过这些数字来判断雷的位置,将是雷的格子标记为小红旗。
若玩家认为已标记的格子时错误的,可以再次右击该格子来取消标记。当某一格子被标记时,对于该格子的单击操作是无效的(防止玩家误点击导致游戏失败)。
如果玩家将某一格周围8个格子中的雷标记了出来,双击该格子会自动将周围的格子点击一遍,这样可以简化玩家的操作。
当玩家将全部的地雷标记出来并且其他的格子点开时,游戏结束。但是如果玩家不小心点到了地雷就会游戏失败,系统自动显示出所有的地雷。如果玩家标识的地雷数量超过了该难度下规定的雷数,计数区会以负数显示超出的雷数并且游戏不会结束。

2.3 扫雷游戏用例图

在这里插入图片描述

2.4 扫雷游戏功能需求

本次扫雷设计需要实现的主要功能有:

(1)玩家可以选择合适的游戏难度

点击游戏界面左上角菜单栏中的“游戏”菜单,会出现出现“初级”、“中级”、“高级”、“自定义”四种选项。在玩家选择难度之后游戏将会改变界面尺寸,并改变雷的总数。前三种雷数和尺寸都是固定的,无需玩家设置,而自定义则是玩家自己定义的。

(2)进行扫雷游戏

游戏界面包括菜单栏,游戏数据显示区域以及雷区,当玩家点击雷区中的任意一格的时候游戏开始,雷区开始随机布雷,玩家需要在最短的时间内找出雷区中所有的地雷,并加以标识。

扫雷的基本操作包括鼠标左键单击和右键单击两种。其中左键用来点开玩家认为不是雷的格子,右键标记玩家认为是雷的格子。

左键单击:玩家在判断出该格子下没有雷时单击该格子,可以将该格子点开。如果该格子周围有雷就会显示周围雷的数目(由于周围最多只有8个格子,所以最多只能显示8);如果格子上什么也不显示(也就是为空),系统就会自动调用递归的方法打开附近的格子。如果点到了有地雷的格子,那么游戏结束,系统显示所有雷的位置。

右键单击:玩家可以通过使用鼠标右键单击来标记自己认为是雷的格子,通过标记可以有效的提高扫雷游戏的效率。再次右击该格子可以取消标记,且格子被标记的时候鼠标单击无效(防止玩家误操作导致游戏失败)。

(3)游戏计时

当点击雷区任意一个格子的时候雷区开始布雷同时计时开始,计时标准是一秒增加1。如果游戏失败时,则计时停止。如果玩家开始了新游戏,计时也会重新开始。

(4)标记地雷

当玩家认为格子下有雷时可以右击格子来标记该格子,被标记的格子显示小红旗。再次右击可以取消标记,且格子被标记的时候鼠标单击无效(防止玩家误操作导致游戏失败)。如果玩家标识的地雷的数量超过了该难度下规定的雷数,计数区会以负数来显示超过的雷数并且游戏不会结束。

(5)统计功能

当玩家游戏胜利后会弹框提示并可以输入玩家的名字,确认后本次游戏的记录会被保存。玩家可以点击菜单栏上的“游戏”菜单,再点击其中的“扫雷榜”即可查看游戏的最佳记录。

(6)退出

点击关闭按钮可以结束游戏。

2.5 扫雷游戏界面需求

(1)游戏菜单

玩家有5项可以选择,玩家在点击初级时游戏界面的尺寸会变为初级的大小,雷区重新初始化,变为一共99的格子,其中有10颗是地雷;中级一共有1616个格子,其中有40颗是地雷;高级一共有16*30个格子,其中有99颗是雷。除此之外,玩家还可以自定义难度,在弹框中填写雷数与尺寸。

玩家通过点击鼠标右键来标记自己认为是雷的格子,通过标记可以有效的提高扫雷游戏的效率,再次点击右键可以取消标记。

扫雷榜,记录玩家不同难度的最短时间。

(2)游戏区域

游戏区域由扫雷信息统计区和雷区组成,其中扫雷信息统计区又分为计数区、计时区、重新开始按钮。

雷区的雷数,每个难度对应的雷数都不同,初级、中级、高级分别对应10、40、99个雷。

计数区初始显示的雷数由难度而定,每次标记地雷雷数均减1,如果玩家标记的地雷的数量超过了该难度下规定的雷数,计数区会以负数显示超过的雷数。

当玩家点开第一个格子雷区开始布雷同时计时开始,一秒加1,直到游戏胜利或者游戏失败的时候停止计时。
2.6 扫雷游戏功能模块
游戏在功能上分为6个模块:

(1) 游戏界面

(2) 布雷

(3) 鼠标事件

(4) 地雷判断

(5) 游戏胜利(结束)

(6) 游戏失败(结束)

三、游戏的概要分析与设计

3.1 设计构想

如今世界上很多人都在使用Windows操作系统,所以人们也对系统自带的小游戏了如指掌。扫雷游戏的玩法简单,只要玩家进行一定的判断就可以轻松的游戏,所以玩扫雷的时候可以很轻松的玩。除了游戏本身带给人们的乐趣以外,游戏的玩法也在锻炼玩家的思维,如今大部分人都是依赖脑力劳动,这就可以通过在闲暇的时候玩玩扫雷来锻炼一下自己。所以就可以理解,为什么在各种电子产品上都搭载这个小游戏了。
虽然游戏比较简单,但是还是需要熟悉一下规则。
玩家需要在最短的时间内找出雷区中所有的地雷,并加以标识,其他没有雷的格子全部点开后游戏胜利。但是如果点到了地雷则游戏失败。
游戏的操作很简单,当玩家用鼠标左键点击自己认为不是地雷的格子会点开该格子,用鼠标右键点击格子会标记该格子,再次右击可以取消标记。玩家可以通过雷区中被点开的格子上显示的数字来判断该格子周围8个格子所隐藏的地雷,例如:点开的格子显示数字“2”,则表示该格子周边的8个格子里隐藏着2颗地雷。
如果点开的格子下没有雷且周围8个格子里也没有雷,则系统会自动点开那8个格子,然后递归判断这些格子周围有没有雷。
本次的扫雷游戏设计,需要编写7个Java类:MineaGamae.java类、MineAra.java类、Block.jaav类、BlockVaiw.java类、LayMinas.java类、Record.java类和ShowRecrd.java类。

(1) MineGame.java
MineGame类是游戏的入口,用来初始化游戏资源,比如界面尺寸和雷数等。同时也负责难度的转换。
(2) MineArea.java
MineArea类是布置雷区的雷,除了初始化雷区以外还可以响应玩家的鼠标操作。
(3) Block.java
Block类是一个POJO类,主要记录了雷区一个个格子的属性,比如名字,周围雷的数目等等。
(4) BlockView.java
BlockView类用来显示块的属性,并且使用卡片布局来使格子分为了上下两层,当玩家点击格子后,会使下面的属性浮现出来。
(5) LayMines.java
LayMines类是计算不是雷的格周围雷个数的类,以及设置点选之后的图片样式。创建的对象lay是MineArea中最重要的成员。
(6) Record.java
Record类是通过IO流将游戏记录储存在本地的文件中,主要实现通关后弹窗提示通关的窗口,以及记录成绩。
(7) ShowRecord.java
ShowRecord类是显示扫雷记录的类。

3.2 流程规划

有三个部分,分别是游戏选择难度后、玩家第一次点击格子和为不是地雷的格子自动点开。
游戏选择难度后,获取该难度设定的雷数与界面尺寸显示界面,但是还没有布雷。当玩家第一次点开格子的时候系统随机布雷并启动定时器,为什么要在点过一次格子之后才布雷呢?这就是要让玩家第一次不会点到地雷,要不然玩家该多郁闷,这样才能提高玩家的游戏欲。之后是最重要的一步,就是如何将格子周围没有雷的格子自动点开,我们可以使用递归的方法来巧妙的判断并点开周围的格子。
整体规划如图3-2所示:
在这里插入图片描述

3.3 界面规划

界面规划如图3-3所示:
在这里插入图片描述
说明如下:
①:游戏主界面(Interface)。
②:菜单(Menu)。
③:地雷数显示区(MineNumberArea)
④:重新开始(Restart)。
⑤:扫雷用时显示区(TimeArea)。
⑥:地雷区(MineArea)。

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

四、联系与交流

q:969060742 完整代码、报告

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

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

相关文章

记录一次服务器内存使用率过高达到90%告警问题排查。

目录 一、前言二、问题排查处理三、 结尾 👩🏽‍💻个人主页:阿木木AEcru 🔥 系列专栏:Docker容器化部署系列 💹每一次技术突破,都是对自我能力的挑战和超越。 一、前言 一大早就有一…

“我的海外代购,卖起了香灰手串”

【潮汐商业评论/文】 “这个琉璃手串,去年在雍和宫请的,招财的;这个朱砂挂件,当时直播说可以补八字缺火,果断下单的;这个博主讲星座很准;这篇帖子八字说得很详细;我前两天买了‘财神…

如何设置IDEA远程连接服务器开发环境并结合cpolar实现ssh远程开发

文章目录 1. 检查Linux SSH服务2. 本地连接测试3. Linux 安装Cpolar4. 创建远程连接公网地址5. 公网远程连接测试6. 固定连接公网地址7. 固定地址连接测试 本文主要介绍如何在IDEA中设置远程连接服务器开发环境,并结合Cpolar内网穿透工具实现无公网远程连接&#xf…

linux下用docker安装mysql及导入文件

目录 1. 非root用户设置docker权限2. user账号安装mysql2. root账号打开防火墙3. 启动mysql容器3.1 在指定工作目录下建立文件夹3.2 配置文件3.3 开启mysql容器 4. 进入容器4.1 通过容器进入mysql4.1 设置账号4.2 建立数据库4.3 导入文件 5. windows连接数据库参考文件 1. 非ro…

【说好的情怀呢】

友情提示: 抄本篇文章答案之前,请务必提前下载好 反诈APP。 多年情怀粉,今日粉转黑.... 问题: Q1: 将附件中 ip_china.csv.zip文件加载为 Hive 内部表,保持格式与 csv header一致,表需要开启压缩 Q2: 将…

k8s系列之十四安装Istio

Istio 是一个开源的服务网格(Service Mesh),用于连接、管理和保护微服务。它提供了一组功能强大的工具,包括流量管理、安全性、监控和跟踪等,以帮助在微服务架构中更好地管理服务之间的通信。 一些主要的 Istio 功能包…

ubuntu内存不足,用Swap扩展增加虚拟内存

Linux增大Swap分区,可以增加虚拟内存,以解决电脑卡机,内存不足等问题 top可以查看cpu的使用情况 lscpu可以查看本机配置的cpu硬件情况 查看内存使用情况 free -h (下面显示"交换"或者Swap等字样说明系统已经启动了Swap&#xff…

GUROBI案例实战(六)——排产排程问题(2)

更多可参考:https://github.com/Gurobi/modeling-examples/blob/master/food_manufacturing/food_manufacture_1.ipynb 一、问题简介 (1) 某厂商生产一种香皂的原材料有植物油脂和非植物油脂,其中植物油脂有两种,非植物油脂有三种&#xff…

【Java - 框架 - SpringMVC】(01) SpringMVC框架的简单创建与使用,快速上手

"SpringMVC"框架的简单创建与使用,快速上手; 环境 Java版本"1.8.0_202";Spring Boot版本"2.5.9";Windows 11 专业版_22621.2428;IntelliJ IDEA 2021.1.3(Ultimate Edition)&#xff1…

Protobuf 的介绍与使用(入门级)

背景 在移动互联网时代,手机流量、电量是最为有限的资源,而移动端的即时通讯应用无疑必须得直面这两点。 解决流量过大的基本方法就是使用高度压缩的通信协议,而数据压缩后流量减小带来的自然结果也就是省电:因为大数据量的传输必…

提升效率!商务电子邮件在WorkPlace中如何高效运用?安全保障!

高效和安全的沟通是任何组织成功的核心。在我们关于电子邮件类型的系列文章的第二期中,我们将重点关注商业电子邮件在促进无缝交互中的关键作用。当你身处重要的工作场环境时,本系列的每篇文章都提供了电子邮件的不同维度的视角。 “2024年,全…

算法系列--递归

一.如何理解递归 递归对于初学者来说是一个非常抽象的概念,笔者在第一次学习时也是迷迷糊糊的(二叉树遍历),递归的代码看起来非常的简洁,优美,但是如何想出来递归的思路或者为什么能用递归这是初学者很难分析出来的 笔者在学习的过程中通过刷题,也总结出自己的一些经验,总结来…

Java开发---上海得帆(一面)

面试感受 这是我的第一次面试,我感觉我这次面试的很差,很糟糕,十分的糟糕,万分的糟糕。第一次面试,面试了半个小时。我去真的好紧张,脑子里一篇空白。脑子空白还不是最惨的,最惨的是那个八股文…

RabbitMQ--04--Spring Cloud Stream(消息驱动)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.Spring Cloud Stream1. 基本介绍https://spring.io/projects/spring-cloud-stream#overview 2.Spring Cloud Stream 解决的痛点问题3.设计思想Stream为什么可以统…

2024网络安全-自学笔记

前言 一、什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防…

新火种AI|国产手机抢滩“AI+折叠屏”赛道,行业洗牌大战就此开启?

作者:小岩 编辑:彩云 从2023年到2024年,随着新一波人工智能浪潮的加速,消费电子产品也迎来了全新的话题——AI。更重要的是,这场战争看似没有硝烟,但各大厂商都已经暗自角力了许久,特别是手机…

Windows 11 鼠标右键可选择 cmd 命令行选项

** Windows 11 鼠标右键可选择 cmd 命令行选项 ** 在文件夹内打开命令行,只能使用 Windows 自带的 PowerShell , 作为一个 cmd 重度使用用户来说很是折磨,需要打开 cmd 然后切换盘符再 cd 。。。 现在咱们自己创建一个可以打开 cmd 的方法…

Qt调用内置图标

int IconIndex0; QIcon icon QApplication::style()->standardIcon((QStyle::StandardPixmap)IconIndex);按以上代码可以调用Qt内置的71个图标,只要变换IconIndex就可以了,IconIndex为[0,70]。显示如下:图标index名称。

图论中的最小生成树:Kruskal与Prim算法深入解析

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:アンビバレント—Uru 0:24━━━━━━️💟──────── 4:02 🔄 ◀️ ⏸ ▶️ ☰ …

西井科技与安通控股签署战略合作协议 共创大物流全新生态

2024年3月21日,西井科技与安通控股在“上海硅巷”新象限空间正式签署战略合作框架协议。双方基于此前在集装箱物流的成功实践与资源优势,积极拓展在AI数字化产品、新能源自动驾驶解决方案和多场景应用,以及绿色物流链等领域的深度探索、强强联…