一文教你从零开始设计并实现一个Java扫雷游戏
背景:扫雷这款游戏有着很长的历史,从扫雷被开发出来到现在进行了无数次的优化,这款游戏变得越来越让人爱不释手了,简单的玩法在加上一个好看的游戏界面,每一处的细节都体现了扫雷的魅力。以JAVA语言作为开发环境,使用Eclipse设计并开发一个类似Windows扫雷的游戏,实现其基本功能。论文首先介绍了课题背景,其次进行了需求分析及可行性分析;然后设计游戏流程,介绍雷区中的雷怎么安放和产生雷的随机算法;最后介绍游戏中可能会触发的各种时间,比如鼠标点击时间和清理掉没有雷的格子,其中鼠标事件包括点击到或没有点击到雷触发的事件和点击到重新开始以及菜单触发的事件,清理掉没有雷的格子就需要使用“递归”的方法来使该功能可以简单的实现。
在1964年 有一个叫“方 块”的游戏,这是扫雷最原始的版本。后来,这个游戏被改成了另一种游戏,叫做“Rlogic”。在这个游戏中,玩家扮演了一名军队的军人,接受了一项艰难的任务:为指挥中心探路。当然游戏不会这么简单,这条路上充满了地雷,玩家需要小心翼翼的探索出一条没有地雷的安全的道路,如果被雷炸死游戏就会结束。一年后,汤姆·安德森(Tom Anderson)在之前游戏的基础上又编写了一款新的游戏,这就是扫雷游戏。1979年, 两名工程师在计算机的操作系统上搭载了这款小游戏,从此以后扫雷游戏开始风靡全球。如今,越来越多的人喜爱上了这款简单易上手的小游戏,这个小游戏可以在任何时间在任何平台上进行游戏,让人可以在游戏中享受到乐趣并且还能在一定程度上锻炼玩家的思维能力。
扫雷这款游戏有着很长的历史,从扫雷被开发出来到现在进行了无数次的优化,这款游戏变得越来越让人爱不释手了,简单的玩法在加上一个好看的游戏界面,每一处的细节都体现了扫雷的魅力。
项目地址:https://github.com/sunmenglei/smljavaSaoLei
主页QQ群也有高级编译器及资料
提交代码请参考:我是如何使用git把本地代码上传到github上的
目录
1选题目的和意义
1.1本文主要研究的内容
2需求分析
2.1可行性分析
2.2扫雷游戏功能描述
2.3扫雷游戏功能需求
2.4扫雷游戏界面需求
2.5扫雷游戏功能模块
3设计构想
3.1流程规划
3.2界面规划
3.3算法思想
4游戏的详细设计
4.1游戏初始化
4.2雷区的布置
4.3游戏中主要模块的介绍与使用
4.3.1鼠标事件
4.4地雷及雷区表面探测情况
4.5清除未靠近地雷的格子
4.6游戏难度的选择
4.7菜单栏的功能
4.8游戏的判断
4.9游戏成功完成
4.10游戏失败
5.类设计
5.1MineGame类
5.2Block类
5.3BlockView类
5.4Record类
5.5ShowRecord类
5.6MineArea类
5.7LayMines类
6.游戏实现
6.1游戏难度自定义
6.2扫雷
6.3玩家通过右键进行扫雷,并显示小红旗
6.4玩家因触碰到雷而导致游戏结束
6.5玩家扫雷成功
6.6玩家游戏数据显示
6.7程序打包发布过程
6.8游戏测试结果
6.9游戏难度自定义测试
7扫雷测试
7.1玩家游戏数据显示测试
7.2游戏数据显示区测试
7.3递归算法测试
结 论
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选题目的和意义
在设计当中让我的知识在实践中融会贯通并得到提升,并且能发现许多平常发现不了的问题,期望能通过本次的设计让我的能力再一次提高。这次一定会让我收获许多,在今后的工作生涯中能轻松的胜任任何任务。
1.1本文主要研究的内容
扫雷游戏风靡全球,受到很多人的喜爱。我研究了这个扫雷游戏之后,发现有两个关键点:
第一点是鼠标事件的处理,包括鼠标点击菜单项中按钮的事件,点击雷区中任意一格的事件,点击界面上按钮的事件等。
第二点是初始化雷区,包括随机生成雷的位置,界面的初始化,计算周围雷数等。
具体要求如下:
(1)扫雷游戏分为三种难度,分别是初、中、高级,点击游戏左上角的“游戏”菜单后会出现“初级”、“中级”、“高级”三种选项。除此之外玩家还可以自定义难度。
(2)在玩家选择难度之后游戏将会改变界面大小,并改变雷的总数。当玩家点开第一个格子时雷区开始布雷同时计时开始。
(3)若玩家想放弃本局游戏并重新开始的话,可以通过点击扫雷信息统计区中的按钮,来结束当前的游戏并开始新的游戏。
(5)若玩家认为某个格下有雷,在该格子上鼠标右键就可以标记一个玩家认为该格是雷的图标,也就是在格子上标记一个小红旗的图案。玩家每标记一个红旗(不管玩家的判断正确与否),界面上的计数区都会把雷数减一。
(6)当所有的雷都标记正确后,游戏会自动弹框显示“您真厉害,请输入您的名字,记录上榜!”。
(7)若玩家在游戏过程中单击了有雷的格子,游戏失败并且记时停止,游戏会将剩余的雷全部显示出来,自动弹框显示“你输了,请继续努力!”,之后玩家可以开始一局新的游戏。
(8)如果玩家不清楚游戏玩法,可以点击菜单栏上的帮助来获取游戏玩法及游戏窍门。
(9)对于自定义难度,系统会有一个阈值,行数在9到16之间,列数在9到30之间,地雷数在10到99之间。如果玩家设置的值超过该阈值,系统会自动将超过的数值变成阈值。
2需求分析
2.1可行性分析
扫雷游戏是一款玩法简单的小游戏,无论是孩子还是老人,都可以在休息的时候玩上一局从而轻松而有效地舒缓压力。而且真正的扫雷高手还可以通过竞速(在最短的时间内完成扫雷)来感受乐趣。
(1)投资可行性:扫雷游戏所占内存少,可以搭载在任意平台,有投资的价值。
(2)财务可行性:从受益者的角度来看,不需太多的经费就能开发这款扫雷小游戏。
(3)组织可行性:制度可行的项目规划,做好人员的配给,保持组员间的良好沟通,定期开会讨论,确保项目能够准时交付。
(4) 经济可行性:可以给开发的企业创造效益,给社会增加工作岗位,并且提高人们的生活质量。
(5) 法律可行性:任何的产品都需要确保它没有触犯法律才能开始设计。但是扫雷游戏并不会触犯任何法律,而且不会和企业之间发生冲突。游戏的开发不会侵犯任何人的利益,也不会违法。
(6) 技术可行性:扫雷游戏的功能简单,只需稍有经验的开发人员就能轻易开发出来,所以技术方面不是太大的问题,主要需要明白扫雷的玩法才能更好的设计与实现该游戏。
2.2扫雷游戏功能描述
当玩家点开第一个格子时雷区开始布雷同时计时开始。然后会在该格子上显示周围8个格子的雷数(如果没有雷则自动点开周围的格子),玩家就需要通过这些数字来判断雷的位置,将是雷的格子标记为小红旗。
若玩家认为已标记的格子时错误的,可以再次右击该格子来取消标记。当某一格子被标记时,对于该格子的单击操作是无效的(防止玩家误点击导致游戏失败)。
如果玩家将某一格周围8个格子中的雷标记了出来,双击该格子会自动将周围的格子点击一遍,这样可以简化玩家的操作。
从上述扫雷游戏功能描述以及用例图可以分析出,整个扫雷游戏中,玩家所能进行的操作有:选择难度、开始游戏、重新开始游戏和记录查询等。
2.3扫雷游戏功能需求
游戏界面包括菜单栏,游戏数据显示区域以及雷区,当玩家点击雷区中的任意一格的时候游戏开始,雷区开始随机布雷,玩家需要在最短的时间内找出雷区中所有的地雷,并加以标识。
扫雷的基本操作包括鼠标左键单击和右键单击两种。其中左键用来点开玩家认为不是雷的格子,右键标记玩家认为是雷的格子。
右键单击:玩家可以通过使用鼠标右键单击来标记自己认为是雷的格子,通过标记可以有效的提高扫雷游戏的效率。再次右击该格子可以取消标记,且格子被标记的时候鼠标单击无效(防止玩家误操作导致游戏失败)。
当点击雷区任意一个格子的时候雷区开始布雷同时计时开始,计时标准是一秒增加1。如果游戏失败时,则计时停止。如果玩家开始了新游戏,计时也会重新开始。
当玩家游戏胜利后会弹框提示并可以输入玩家的名字,确认后本次游戏的记录会被保存。玩家可以点击菜单栏上的“游戏”菜单,再点击其中的“扫雷榜”即可查看游戏的最佳记录。
2.4扫雷游戏界面需求
玩家通过点击鼠标右键来标记自己认为是雷的格子,通过标记可以有效的提高扫雷游戏的效率,再次点击右键可以取消标记。
游戏区域由扫雷信息统计区和雷区组成,其中扫雷信息统计区又分为计数区、计时区、重新开始按钮。
雷区的雷数,每个难度对应的雷数都不同,初级、中级、高级分别对应10、40、99个雷。
计数区初始显示的雷数由难度而定,每次标记地雷雷数均减1,如果玩家标记的地雷的数量超过了该难度下规定的雷数,计数区会以负数显示超过的雷数。
当玩家点开第一个格子雷区开始布雷同时计时开始,一秒加1,直到游戏胜利或者游戏失败的时候停止计时。
2.5扫雷游戏功能模块
3设计构想
玩家需要在最短的时间内找出雷区中所有的地雷,并加以标识,其他没有雷的格子全部点开后游戏胜利。但是如果点到了地雷则游戏失败。
如果点开的格子下没有雷且周围8个格子里也没有雷,则系统会自动点开那8个格子,然后递归判断这些格子周围有没有雷。
MineGame类是游戏的入口,用来初始化游戏资源,比如界面尺寸和雷数等。同时也负责难度的转换。
MineArea类是布置雷区的雷,除了初始化雷区以外还可以响应玩家的鼠标操作。
Block类是一个POJO类,主要记录了雷区一个个格子的属性,比如名字,周围雷的数目等等。
BlockView类用来显示块的属性,并且使用卡片布局来使格子分为了上下两层,当玩家点击格子后,会使下面的属性浮现出来。
LayMines类是计算不是雷的格周围雷个数的类,以及设置点选之后的图片样式。创建的对象lay是MineArea中最重要的成员。
Record类是通过IO流将游戏记录储存在本地的文件中,主要实现通关后弹窗提示通关的窗口,以及记录成绩。
3.1流程规划
有三个部分,分别是游戏选择难度后、玩家第一次点击格子和为不是地雷的格子自动点开。
3.2界面规划
3.3算法思想
当没有雷的格子被点击后,会显示该格子周围8个格子里所有的雷数,玩家通过这个数字就可以判断出雷的位置,所以周围雷数的计算也很重要。
4游戏的详细设计
4.1游戏初始化
玩家点开游戏,此时系统自动加载界面,分别是雷区、菜单区、扫雷数据显示区,
游戏界面相对计算机自带的扫雷游戏比较简洁,主要由游戏数据显示区域以及雷区构成。
我们使用ImageIcon对象来存放地雷的图标,可以图标大小最好要小一些,否则会在格子上显示不全。
而之前所说的循环初始化其实就是循环的加载组件,雷区就是由一个个组件构成的,通过循环将所有的格子都布置到雷区,然后再随机产生地雷并布置到雷区上。
组件位置的摆放是按照其在数组中的位置来摆放的,所有的格子组件都存放在一个二维数组之中,组件在这个数组中的下标就是他在布局中的位置。
菜单栏是由菜单组件构成的,也就是JMenu组件,这个是菜单组件,用来定义未点击时的菜单样式,这个组件有可以设置JMenauItem组件,这是菜单项的意思,是当玩家点击了菜单后展示出来的子菜单栏。
扫雷游戏的计时区以及计数区又是使用另一种组件完成的,叫做JTextField
在设置界面的时候还需要进行一些设置,比如设置属性来让玩家在关闭游戏窗口时,系统会自动释放资源,并关闭窗口。
4.2雷区的布置
当玩家第一次点开格子的时候系统随机布雷并启动定时器,但是为什么要在点过一次格子之后才布雷呢?原来这就是要让玩家第一次不会点到地雷,要不然玩家该多郁闷,这样才能提高玩家的游戏欲。具体实现如下所示:
4.3游戏中主要模块的介绍与使用
4.3.1鼠标事件
我们通过点击鼠标左键或者鼠标右键来完成游戏,使用系统自带的MouseDown和MouseUp事件来响应玩家的操作。
这两个原型中的参数,Button参数值分别表示玩家用鼠标的左键或者右键进行点击的。其意义如下:
如果同时按两个按键,那么系统就会传回3,因为点左键是1,点右键是2,一起点就是两个值相加了。
4.4地雷及雷区表面探测情况
在雷区的设计上,我使用循环加载组件的方法让雷区布满格子,如果玩家点击了格子就会让该格子下面隐藏的组件显示出来
4.5清除未靠近地雷的格子
当玩家在进行游戏时点击了任意一个格子,系统会检测周围8个格子下是否藏雷,如果雷都被标记或者没有雷就会被点开并循环调用继续判断被点开格子周围的雷数。
设计的时候需要考虑的判断条件:玩家点击了某一个格子后判断该格子下是否藏雷;如果没有雷则判断周围8个格的雷数并显示;若雷都被标记出来或者本来就没有雷则点开周围的格子递归判断被点开格子周围的雷。
由于递归是循环调用方法本身,所以需要一个判断语句来结束调用,当被点开的格子周围有雷时在格子上显示雷数并结束递归调用。
4.6游戏难度的选择
4.7菜单栏的功能
初级:设置格子总数为9*9,地雷总数为10颗雷,尺寸为300*380然后重新开始游戏。
中级:设置格子总数为16*16,地雷总数为40颗雷,尺寸为480*580然后重新开始游戏。
高级:设置格子总数为16*30,地雷总数为99颗雷,尺寸为800*500然后重新开始游戏。
自定义:设置格子总数为最大24*30,最多雷数为24*30的难度,然后重新开始游戏。
扫雷榜: 打开并显示时间最短的扫雷记录,可以进行更新和重新记分。
4.8游戏的判断
4.9游戏成功完成
游戏要求玩家在最短的时间内完成游戏,当玩家将所有的雷标记出来并且其它格子都点开以后游戏胜利,系统会弹出提示框告诉玩家“您真厉害,请输入您的名字,记录上榜!”,系统会记录玩家最短完成游戏的时间。
4.10游戏失败
如果玩家不幸点击到了有雷的格子,该格子的地雷会引爆其他的地雷,游戏失败,系统会将剩下的地雷全部显示出来,并弹框提示“你输了,请继续努力!”,玩家可以选择弹框上的重新开始游戏选项来开始一局新的游戏。
格子类的对象有一个标识该格子是否是雷的属性,通过该属性来判断玩家点到的是不是地雷。在游戏结束时也是通过该属性来判断哪些格子下有雷并显示出来。
5.类设计
5.1MineGame类
MineGame类主要负责开始游戏,菜单的设计,以及难度的转换。展示该类的UML图
mineArea 是MineArea雷的对象,是设计雷区的变量。
MiwneGaame()通过该方法设置了游戏整体的位置和布局,并实现菜单栏功能,初始化统计信息。
actionPerformed(ActionEvent e)是响应点击菜单项的方法,通过该方法可以实现选择不同难度调整游戏的雷数和尺寸。玩家点选不同的菜单项会让该方法执行不同的操作。
main()方法是游戏开始的方法,通过new了一个MineGame的对象来实现游戏的开始。
5.2Block类
Block类是一个POJO类,主要记录了雷区一个个格子的属性,比如名字,周围雷的数目等等。展示该类的UML图
arounfdMinqeNmber是记录格子周围8个格子中雷的数量的变量。
setAounMineNuber()方法可以设置块周围雷的数目。
getAroundMineNumber()获取块周围雷的数目。
5.3BlockView类
BlockView类继承了JPanel类,主要布置每一个格子的布局,用来定义每个格子的属性。显示该类的UML图如图4-6所示。
blockeNameOrIcona 该变量用来显示格子的名字和图标属性。
BlockView()构造方法,初始化变量,设置块上属性显示的位置为居中,并添加组件。
seeBlouckNamerOrIcon()方法是用来让块的属性显示出来。
seeBlouckCovear()方法是让cover遮盖块的属性。
getBlouckCovear()方法是得到用来遮盖的按钮。
5.4Record类
Record类主要实现通关后弹窗提示通关的窗口,以及记录成绩。当玩家扫雷成功时,该对象提供了保存成绩到文件的界面。展示该类的UML图如图4-7所示。
Record() 构造方法,初始化变量,设置窗口是否可以调整大小。
writeRecord() 方法可以读写记录,如果没有记录会先创建一个新的文档来保存记录,下次直接修改覆盖记录。
5.5ShowRecord类
ShowRecord类是显示扫雷记录的类。展示该类的UML图如图4-8所示。
ShowRecord() 方法是该类的构造方法,初始化成员变量。
readAndShow() 方法会把在文档中记录的玩家通关信息筛选出来(按游戏完成是花费的时间最短为条件筛选),并显示到弹出的对话框中。
actionPerformed(ActionEvent e)方法是响应玩家操作的方法,当玩家想要显示游戏记录的时候系统会响应玩家的要求并调用显示成绩的方法,在弹框中刷新成绩。
5.6MineArea类
MineArea类主要用于雷区的初始化以及鼠标事件的响应。展示该类的UML图如图4-9所示。
blockView 是一个二维数组,是给每一个格子提供显示视图的。
mark 是ImageIcon类型的变量,用来存放地雷图标。
grade 是记录难度的变量,分别有“初级”、“中级”、“高级”三种难度。
pCenter 是JPanel类型的变量,定义布局中部的控件
pNorth 是JPanel类型的变量,分别位于布局的北部的控件。
showMareedCoint 是显示玩家标记后剩余的雷数的变量。
record 是一个对话框变量,用来显示玩家的最好记录,当玩家点击菜单中的英雄榜时会显示该对话框。
reStart1 是一个按钮对象,位于失败对话框里,玩家点击后会触发与reStart一样的操作。
MineArea()方法是该类的构造方法,初始化组件和一下对象,设置字体颜色、边框颜色等,并调用初始化雷区的方法来初始化雷区。
initMineArea()方法用来设置雷数和游戏界面所有格子的数量,初始化雷区。
setMineCount(int mineCount)方法用来设置地雷总数。
actionPerformed(ActionEvent)方法是响应鼠标点击格子的事件的方法,当点击的格子下面没有雷,该方法会显示该格子周围雷的数目,有雷则显示雷的图标。
show()方法是显示格子内容,并且使用递归调用来显示周围格子的内容,直到这个格子周围有雷。
mousePressed(MouseEvent)方法响应玩家对格子进行的鼠标左键单击事件和鼠标右键点击事件。
inquireWin()方法是在玩家在游戏过程中满足获胜条件是触发的方法,同时会调用其他方法弹框提示玩家游戏结束。
5.7LayMines类
LayMines是计算不是雷的格周围雷个数的类,以及设置点选之后的图片样式。标明该类的UML图
6.游戏实现
6.1游戏难度自定义
分别展示了初级、中级、高级以及自定义难度的游戏界面尺寸和雷数。
6.2扫雷
6.3玩家通过右键进行扫雷,并显示小红旗
玩家在游戏过程中会对某一格周围是否有雷进行判断,当玩家认为格子下有雷时就可以通过使用鼠标右键点击该格子,将该格子标识为小红旗如图5-6所示。
6.4玩家因触碰到雷而导致游戏结束
6.5玩家扫雷成功
6.6玩家游戏数据显示
每当玩家成功扫完所有的雷后,系统会自动的记录本次的成绩,保存在本地的txt文档中,内容是三种难度,玩家姓名以及对应难度玩家所用的最少游戏时间。当玩家点击查看英雄榜的时候系统默认只显示三种难度和匿名。
玩家点击关闭时此窗口会关掉这个弹窗,当点击重新记分时,统计信息会清空,点击显示成绩就好刷新并将历史最好的成绩显示出来。界面也会发生变化,可以显示出游戏用时。
6.7程序打包发布过程
至此扫雷游戏已经编写好了,我们可以将这个游戏打包发布,这就需要利用jar.exe命令来将编写好的扫雷游戏的class文件打包发布。
(1)编写清单文件。首先需要使用“记事本”,根据要求自己编写一个清单文件,格式和内容要和这里给的样子一样,具体内容如下:
将清单文件保存到E:\workspace\扫雷\bin\com\zx\mine中,也就是和编写的扫雷游戏程序生成的字节码存放的位置相同,保证这些文件放在一个目录下。
需要注意的是,清单文件中的所有内容均为键值对的形式存放,键值直接必须空一个空格。
最后就可以将这个生成的JAR文件复制到任何一个安装了Java运行环境(电脑上的jdk版本不能太低)的电脑上,玩家就可直接用鼠标双击图标来运行自己编写的扫雷小游戏了。
6.8游戏测试结果
6.9游戏难度自定义测试
预期结果 |
选择不同的难度后可以正确的初始化雷区 |
输入条件 |
分别点击初级、中级、高级和自定义 |
测试结果 |
点选不同难度后系统会自动改变雷区大小和地雷数 |
测试了四种难度的选择,由图可以看出难度的选择功能正常,可以自由变换尺寸和地雷总数。
7扫雷测试
预期结果 |
成功的将所有地雷标记出来后,游戏可以立马结束且会弹框提示输入玩家名字 |
输入条件 |
将所有地雷标记并将非雷格子点开 |
测试结果 |
游戏结束并且显示了要求玩家输入名字的弹框 |
预期结果 |
点击了有雷的格子后游戏可以立马结束且弹框提示玩家游戏失败 |
输入条件 |
点击有雷的格子 |
测试结果 |
游戏正确的结束且弹框提示了游戏失败的提示 |
7.1玩家游戏数据显示测试
预期结果 |
点击“最佳成绩”按钮时会显示玩家最佳的游戏记录 |
输入条件 |
打开游戏的扫雷榜,点击“最佳成绩”按钮 |
测试结果 |
游戏可以正确的显示玩家的游戏记录 |
预期结果 |
点击“重新记分”按钮时会清除玩家以往的游戏记录 |
输入条件 |
打开游戏的扫雷榜,点击“重新记分”按钮 |
测试结果 |
点击按钮后游戏记录消失,再点击“最佳成绩”按钮只会显示默认的成绩 |
通过图6-10可以看出,当玩家点击了“重新记分”按钮后,之前游戏记录都会被清除掉,只会显示默认的数据:时间为999秒,名字是匿名。
7.2游戏数据显示区测试
预期结果 |
第一次点击雷区的格子时,计时区开始计时,游戏结束时计时停止,重新开始游戏时,计时归零 |
输入条件 |
点击雷区的任意一格,然后结束游戏,最后点击“重新开始”按钮 |
测试结果 |
当点击雷区任意一格后计时开始,计时正常。然后点击有雷的格子结束游戏发现计时停止。点击“重新开始”后计时区的计时正确归零 |
当点击雷区中的任意一格后,计时区开始正常计时。当游戏结束时计时区的计时就会停止,最后点击了“重新开始”后计时区的计时归零。
预期结果 |
标记地雷后计数区的数字会减1,如果标记数超过地雷数,计数区会用负数显示 |
输入条件 |
先标记一颗地雷,然后将所有的地雷标记出来 |
测试结果 |
标记一颗地雷后,计数区可以正确的减少1个,然后当所有的地雷全被标记后,如果继续标记,计数区可以正确的以负数表示 |
当标记了一颗地雷后计数区中的数字会相应的减少一个,表示有一颗雷被找到了。但是如果标记数超过了地雷的数目,计数区会以负数显示,表示有的地雷标记错了
7.3递归算法测试
预期结果 |
当点击一个周围八个格子中都没有雷的格子时,系统会将这8个格子也点开 |
输入条件 |
点开一个周围没有雷的格子 |
测试结果 |
系统正确的将周围的八个格子点开,如果这些格子中周围的格子没有雷的话还会自动点开 |
当点击一个周围八个格子中都没有雷的格子时,系统会将周围的格子点开,被点开的格子也会显示周围的地雷数。如果被点开的格子周围还是没有地雷,系统就会递归调用再把周围的格子点开。
结 论
虽然这次的扫雷游戏看似简单,但是其中却涉及了GUI设计,需要我自己去学习。其中有各种组件的调用,各种控件的使用等
一文教你从零开始设计并实现一个Java扫雷游戏相关推荐
- ChatGPT 又整活了,从零开始设计并实现一个类似数独的游戏 Sumplete
ChatGPT 又整活了.这次是从零开始设计并实现一个类似数独的游戏. 数独应该很多人都玩过,规则也很简单. 那能不能设计一款与数独类似的新游戏呢?国外有位叫 Daniel Tait 的工程师就想到了 ...
- 如何用python编一个扫雷游戏_用 Python 做一个 Windows 扫雷游戏
原标题:用 Python 做一个 Windows 扫雷游戏 本文代码基于 python3.6 和 pygame1.9.4. Windows XP 上的扫雷是无数80/90后的集体回忆,今天我们就用 P ...
- 帮我写一个网页扫雷游戏基本的版本
好的,我来帮你写一个基本版本的网页扫雷游戏. 首先,你需要熟悉 HTML.CSS 和 JavaScript 等前端技术,并了解二维数组.循环.判断语句等编程基础知识. 以下是简单的代码实现: HTML ...
- 小白如何从零开始设计并开发一个微信小程序?
背景:微信小程序的出现,让更多的中小型企业初期不再以APP为首选,小程序的天然优势让他备受关注,也因此诞生了专门的小程序开发岗位,让前端有机会继续蚕食其他岗位的份额. 但微信小程序也会很多缺点,最大的 ...
- Python游戏开发,Pygame模块,Python从零开始带大家实现一个魔塔小游戏
开发工具 Python版本: 3.7.4 相关模块: pygame模块: 以及一些python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 原理简介 首先, ...
- java课程设计拼图_基于Java拼图游戏的设计与实现(含录像)
基于拼图游戏的设计与实现(含录像) 摘 要 本拼图游戏是基于J2SE平台开发的,它是一个Application,它的游戏规则和诺亚舟里的拼图游戏是一样的.这个游戏将一张大图切割成N张小图,然后在 ...
- java猜拳_求一个java猜拳游戏程序
展开全部 package test; import java.util.Random; import java.util.Scanner; /** * 猜拳游戏思路 * 1.定义输入函数 * 2.提示 ...
- 有哪些小游戏的java代码_求一个Java小游戏代码(鼠标点击类小游戏)最好代码里面不要有中文...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 } else{ black_count=0; } if(chess[i][j]==2) { white_count++; if(white_count== ...
- 纪念自己编写的第一个java小游戏,飞翔小鸟
我是一名Java初学者 这是我写的第一个小游戏,特此纪念下 -------------------------------------------------------- 效果图: -------- ...
最新文章
- Android开发之Buidler模式初探结合AlertDialog.Builder讲解
- AOP的两种实现方式
- MongoDB负载信息一目了然 阿里云HDM重磅发布MongoDB监控和诊断功
- 小白学数据分析-----聚类分析理论之K-means理论篇
- C++重载下标操作符[](二)
- Python3算法基础练习:编程100例( 21~ 25)
- 【Python】时间处理:日期减少n年(考虑闰年)
- 数据库高级知识——mysql架构介绍(二)
- Java 找到并返回一组字符串中第一个不为空的字符串
- Linux中路径的组成部分
- linux双击脚本不弹出选择框,在安装msicuu2.exe的时候不能安装弹出对话框windows脚本宿主是怎么回事?...
- 快乐的实现单独页面横屏
- python实现雪花飘落的效果_简单说 JavaScript实现雪花飘落效果
- 江门环境监测实验室通风工程设计
- 什么是Apple Rosetta 2
- 100个优秀jQuery插件精选
- 蓝牙耳机连Stereo mode上win10后没有声音?
- el-cascader省市区 三级数据
- 浙江八年级 python_今年9月起 浙江八年级新增Python编程课程
- MAC OS X 终端命令入门 (简单常用整理)