题目简介

  参考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的初始化界面大小难以控制,特别是在自定义的情况下,需在手动改面窗口的大小。

 心得

  这个扫雷游戏是模拟微软系统自带的扫雷游戏,虽然并不完全一样。在编程过程中也遇到很多问题,有些问题比较简单但就不知道错在哪里,有些大问题之道在哪就是不知道怎么办才好,后来经过自己的不断调试,和队友的帮助这个扫雷游戏终于大功告成。 

  经过编写这个扫雷游戏,我认识到应该注意细节问题,虽然是很小的问题,但可以提高自己编程的能力,而且还可以培养自己与他人合作编程的能力,同时还可以为以后的编程积累经验。编写完这个扫雷游戏,我发现如果自己来单独来编写这个游戏是有些吃力的,但是结伴编程便可解决这个问题了。