题目简介
参考Windows 2000/XP系统提供的扫雷游戏,模拟做了一个扫雷游戏程序, 增加以下功能:在主界面中添加一个菜单栏,菜单栏中包括游戏和帮助两个菜单,其中游戏菜单中设置初级、中级、高级、自定义、、扫雷英雄榜这几个菜单项,帮助菜单中设置游戏规则菜单项。主要实现了如下算法:单击某行某列后产生不在单击处引爆的地图。出现空格后引发递归的清空算法。
代 码 地 址: https://github.com/FBean/test3.git
结伴人博客链接地址:http://www.cnblogs.com/hutua/p/4508890.html
结对分工情况
李建宾 负责 MineGame.java、MineArea.java、BlockView.java、BlockView.java
韩 宁 负责 LayMines.java、Record.java、ShowRecord.java、userDefine.java、ruleShow.java
结对实践过程
1、MineGame类
MineGame类是javax.swing 包中Jframe的一人子类,并实现了ActionListener接中,
1)成员变量
· bar和fileMenu提供菜单操作,单击游戏菜单中的选项为“初级”“中级”“高级”“自定义”“扫雷英雄榜”“背景声音”“退出”“游戏规则”“制作人”等
·MineArea 是扫雷区域,提供有关扫雷的主要功能。
·“英雄榜”负责存放三个级别的扫雷最好成绩。
·showheroRecord负责显示英雄榜中的数据
·userdefine负责用户自定义功能
·VoiceShow 负责背景音乐功能
·ruleshow负责显示游戏规则功能
·authorshow负责显示作者功能
2)方法
·MineGame()方法,负责完成窗口的主要功能
·actionPerformed(ActionEvent)方法是MineGame类实现的ActionListerer接口中的方法,该方法负责执行菜单发出的有关命令。
用户选择菜单项可以触发ActionEvent事件,导致actionPerformed(ActionEvent)方法执行相应的操作,例如将mineAreaw创建的雷区设置为初级 中级 高级等
·Main(String[])方法是程序的入口方法
2、MineArea类
效果图
MineArea类是javax.swing包中JPanel容器的子类,实现了ActionListener和MouserListener接口,所创建的对象:mineArea是MineGame类中最重要的成员之一,作为一个容器添加到MineGame窗口的中心。
1)成员变量
•Block是Block类型的数组,用来确定雷区有多少需进行扫雷的方块。
•blockView是Blockview类型的数组,负责为block数组中的Block对象提供视图。
•Lay是LayMines类型的对象,负责设置block数组中的哪些方块是雷或不是雷。
•Record负责提供保存成绩的界面,是一个对话框,默认不可见。用户只有扫雷成功后(用时最少),才能看见该对话框。
•reStart是一个按钮对象,用户单击它重新开始游戏。
•time是计时器对象,负责计算用户的用时。
2)方法
•initMineArea(int,int,int,int)方法可根据参数提供的数据设置雷区的宽度,高度,雷的数目以及雷区的级别。
•actionPerformed(ActionEvent)是MIneArea类实现ActionListener接口中的方法。当用户单击blockView中的某个方块时,actionPerformed(ActionEvent)方法
负责执行有关算法,例如,当用鼠标左键单击方块上的按钮后,若该方块下有雷,actionPerformed(ActionEvent)方法将使用户输掉本局,若该方块下又雷,
actionPerformed(ActionEvent)方法将显示BlockView对象中的标签,该标签上是一个数字,该数字代表当前方块的周围的8个方块中总共有多少颗雷
•show()方法是一个递归方法。actionPerformed(ActionEvent)方法执行时将调用show方法进行扫雷。
•mousePress(MouseEvent)方法是MineArea类实现的MouseListener接口中的方法,当用户按下鼠标右键时,mousePress(MouseEvent)方法负责让方块上
显示一个探雷标记。
•inquireWin()方法用来判断用户是否扫雷成功,如果成功该方法负责让record对话框可见。所谓扫雷成功是指不仅找到了全部的雷而且用时最少。
3、Block
Block对象负责封装雷区中方块中的数据以及对这些数据的操作,外观效果由Blockview负责提供
Block类创建的对象是数组block的单元的对象。Block型数组block是MineArea类的重要成员之一。
1)成员变量
·name是方块上的名字。
·aroundMineNumber是方块周围雷的数目。
·mineIcon是方块上雷的图标。
·sMine用来表示方块是否是雷。
·isMark用来表示方块是否被标记。
·isOpen用来表示方块是否被挖开。
2)方法
·setAroundMineNumber(int)方法用来设置aroundMineNumber的值。
·getAroundMineNumber()方法用来获取aroundMineNumber的值。
4、BlockView类
BlockView创建的对象负责为Block对象提供视图,以便用户通过该视图与Block对象交互。BlockView对象使用一个标签和按钮为Block对象提供视图,标签和按钮按着卡片布局层叠在一起,默认状态按钮遮挡住标签。当用户单击按钮后,如果Block对象时雷,BlockView对象中的标签显示的事雷的图标;如果Block对象不是雷,标签显示的是周围雷的总数。
1)成员变量
·blockNameOrIcon用来显示Block对象的name,number和mineIcon属性。
·blockCover用来遮挡blockNameOrIcon。
·card卡片布局
2)方法
·giveView(Block block)方法给参数指定的Block对象提供视图,如果Block对象的isMine属性为true,即方块是雷,那么blockNameOrIcon标签上设置的文本就是
Block对象的name属性的值,同时blockNameOrIcon标签上设置的图标就是Block对象的mineIcon指定的图标。如果Block对象的isMine属性为false,
blockNameOrIcon标签上设置的图标就是Block对象的aroundMineNumber属性的值,及周围雷的数目
·seeblockNameOrIcon()方法让用户看见视图中的标签,无法看见按钮。
·seeblockNameOrIcon(0方法让用户看见视图中的按钮,无法看见标签。
测试情况
在程序代码基本完成后,经过不断的调试与修改,最后测试本次所设计的扫雷游戏能够正常运行,在基本功能与画面上与Windows自带的扫雷游戏没有太大差别,没有出现明显的错误和漏洞,但是在一些细节方面仍然需要完善,比如在游戏中可以加入一些不同语音的提示,在游戏完成和失败的时候可以弹出一些小的Flash动画,还有就是可以扩展一下扫雷英雄榜的功能等。总的来说本次设计在功能上已经基本达到要求,其他细节方面有待以后完善
整体运行结果图
游戏菜单
帮助菜单
自定义难度
英雄榜
游戏规则
问题及心得
问题
1、界面的美观性做的不太好,比如说布局,颜色搭配有待改进
2、MineGame的初始化界面大小难以控制,特别是在自定义的情况下,需在手动改面窗口的大小。
心得
这个扫雷游戏是模拟微软系统自带的扫雷游戏,虽然并不完全一样。在编程过程中也遇到很多问题,有些问题比较简单但就不知道错在哪里,有些大问题之道在哪就是不知道怎么办才好,后来经过自己的不断调试,和队友的帮助这个扫雷游戏终于大功告成。
经过编写这个扫雷游戏,我认识到应该注意细节问题,虽然是很小的问题,但可以提高自己编程的能力,而且还可以培养自己与他人合作编程的能力,同时还可以为以后的编程积累经验。编写完这个扫雷游戏,我发现如果自己来单独来编写这个游戏是有些吃力的,但是结伴编程便可解决这个问题了。