扫雷游戏课程设计报告整合.docx
《扫雷游戏课程设计报告整合.docx》由会员分享,可在线阅读,更多相关《扫雷游戏课程设计报告整合.docx(44页珍藏版)》请在冰豆网上搜索。
扫雷游戏课程设计报告整合
《面向对象程序设计》
课程设计报告
题目:
扫雷游戏设计
院(系):
计算机与电子系
专业班级:
计算机科学与技术0903班
学生姓名:
============
学号:
============
指导教师:
=======
2012年6月4日至2012年6月15日
华中科技大学武昌分校制
面向对象程序设计课程设计任务书
一、设计(调查报告/论文)题目
扫雷游戏设计
二、设计(调查报告/论文)主要内容
内容:
Windows系统提供的扫雷游戏是一个很有趣的游戏。
这里使用Java语言编写一个与其类似的扫雷游戏。
基本功能与要求:
1.扫雷游戏分为初级,中级和高级三个级别,扫雷英雄榜存储每个级别的最好成绩,即挖出全部的地雷且用时最少者。
游戏菜单可以选择“初级”,“中级”和“高级”或“查看英雄榜”。
2.选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键单击雷区中的任何一个方块启动计时器。
3.用户要揭开某个方块,可单击它。
若所揭方块下有雷,用户便输了这一局,若所揭方块下无雷,则显示数字,该数字代表方块周围的八个方块中共有多少颗雷。
4.如果用户认为某个方块下埋有地雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。
用户每标记出一个扫雷标记(无论用户标记是否正确),程序将显示剩余雷数减少一个。
5.扫雷胜利后(用时最少者),程序弹出保存成绩对话框。
三、原始资料
1.《面向对象程序设计课程设计》指导书
2.耿祥义.JAVA大学实用教程.北京:
清华大学出版社,2009.
四、要求的设计(调查/论文)成果
1.课程设计报告
2.课程设计软件
五、进程安排
布置任务,查找资料、需求分析1天
总体设计1天
详细设计1.5天
编制源程序实现3.5天
测试与修改1天
撰写课设报告2天
六、主要参考资料
[1]张广彬.Java课程设计案例精编(第二版).北京:
清华大学出版社,2011.
[2]耿祥义.Java课程设计(第二版).北京:
清华大学出版社,2008.
[3]耿祥义.JAVA大学实用教程.北京:
清华大学出版社,2009.
[4]邹林达.陈国君Java2程序设计基础.北京:
清华大学出版社,2010.
[5]邹林达.Java2程序设计基础实验指导.北京:
清华大学,2010.
指导教师(签名):
20年月日
1需求与总体设计……………………………………………………………………………1
1.1需求分析………………………………………………………………………1
1.2总体设计………………………………………………………………………1
2详细设计…………………………………………………………………………………4
2.1MineGame类………………………………………………………………………4
2.2MineArea类………………………………………………………………………5
2.3Block类………………………………………………………………………6
2.4BlockView类………………………………………………………………………7
2.5LayMines类………………………………………………………………………8
2.6Record类………………………………………………………………………8
2.7ShowRecord类……………………………………………………………………9
2.8userDifine类………………………………………………………………………9
3编码实现…………………………………………………………………………………11
3.1MineGame类……………………………………………………………11
3.2MineArea类………………………………………………………………14
3.3Block类………………………………………………………………………17
3.4BlockView类………………………………………………………………………18
3.5LayMines类………………………………………………………………………19
3.6Record类………………………………………………………………………20
3.7ShowRecord类…………………………………………………………………21
3.8userDifine类………………………………………………………………………24
4系统测试…………………………………………………………………………………26
总结…………………………………………………………………………………30
1需求与总体设计
1.1需求分析
1.1.1扫雷游戏概述
扫雷是一种具有迷惑性的对记忆和推理能力的简单测试,它是长久以来最受欢迎的Windows游戏之一。
游戏目标:
找出空方块,同时避免触雷。
1.1.2扫雷的操作方法
游戏主区域由很多个方格组成。
使用鼠标随机点击一个方格,方格即被打开并显示出方格中的数字;方格中数字则表示其周围的8个方格隐藏了几颗雷;如果点开的格子为空白格,即其周围有0颗雷,则其周围格子自动打开。
例如,方格中出现1,说明上下左右及斜角合计有一颗雷,依次类推,2则有2颗,3则有3颗。
1.1.3游戏具有的功能
.能够显示主菜单和界面
游戏需要提供主菜单让玩家进行游戏设置,同时能够显示当前剩余的地雷数量及当前花费时间等相关信息到界面上。
.能够接收鼠标输入功能
能够接收玩家的鼠标输入功能,左键和右键输入。
.能够根据规则翻转相应的格子
翻动指定位置的格子。
.能够标示指定格子的功能
即能够对确定或者怀疑是地雷的格子进行"旗子"和"?
"符号的标示。
.游戏胜负判断功能
当玩家单击的格子中有地雷时,判定玩家失败,游戏结束。
当扫雷游戏中全部格子被打开时,判定玩家成功。
英雄榜记录更新
当有玩家把当前等级的地雷全部扫出来后,并且时间比记录中的时间短时,在结束游戏时,要求玩家把名字保存下来。
游戏初始时时间为999秒。
例如,当第一个玩家把全部地雷扫出来的时间为120秒,这时玩家的记录时间将被保存下来并作为记录时间线。
直到有玩家的时间少于120秒,才能更新当前记录时间线并保存玩家的名字。
1.2总体设计
在设计扫雷游戏时,需要编写8个Java源文件:
MineGame.java、MineArea.java、Block.java、BlockView.java、userDefine.java、LayMines.java、Record.java和ShowRecord.java.扫雷游戏除了需要编写上述8个Java源文件所给出的类外,还需要Java系统提供的一些重要的类,例如File、JButton和JLabel等类。
扫雷游戏所用到的一些重要的类以及之间的组合关系如图1-1所示,系统功能图如图1-2所示。
1.2.1MineGame.java(主类)
MineGame类负责创建扫雷游戏主窗口,该文件含有main方法。
扫雷游戏从该类开始执行。
1.2.2MineArea.java
MineArea类创建的对象是MineArea类最重要的成员之一,代表“扫雷区域”。
1.2.3Block.java
Block类是雷区中“方块”的类封装,含有关于“方块”的属性以及操作,即负责为雷区创建代表“方块”的Block对象。
1.2.4BlockView.java
BlockView是JPanel容器的子类,BlockView创建的对象负责为Block对象提供视图,以方便用户通过该视图与Block对象交互。
1.2.5LayMines.java
LayMine类对象不需要视图,在游戏中不需要看见该类。
LayMine对象使用随机算法指定MineArea对象中的哪些Block对象是雷,哪些Block对象不是雷。
1.2.6Record.java
Record类是JDialog对话框的子类,对用户扫雷成功时,Record对象负责保存用户的成绩到文件。
1.2.7ShowRecord.java
ShowRecord类是JDialog对话框的子类,当用户查看扫雷的最好成绩时,ShowRecord对象负责提供读取文件数据的界面。
1.2.8userDefine类
userDefine类是JDialog对话框的子类,当用户想自定义扫雷难度时,ShowRecord对象负责设置用户想要的难度设置。
2详细设计
2.1MineGame类
MineGame类是javax.swing包中JFrame的一个子类,并实现了ActionListener接口。
标明该类的只要成员变量和方法的UML图如图2-1所示。
以下是UML图中有关数据和方法的详细说明。
1)成员变量
a.bar和fileMenu提供菜单操作,单击游戏菜单项为“开始”、“初级”、“中级”、“高级”、“扫雷英雄榜”、“自定义”和“退出”。
单击帮助菜单项为“关于”。
b.mineArea是扫雷区域,提供有关扫雷的主要功能。
c.“英雄榜”负责存放三个级别的扫雷最好成绩。
d.showHeroRecord负责显示英雄榜中的数据。
2)方法
A.MineGame()是构造方法,负责完成窗口的初始化。
B.ActionPerformed(ActionEven)方法是MineGame类实现的ActionListener接口中的方法,该方法负责执行菜单发出的有关命令。
用户选择菜单中的菜单项可触发ActionEvent事件,导致actionPerformed(ActionEvent)方法执行相应的操作,例如将mineArea创建的雷区设置为初级、中级、高级。
C.main(String[])方法是程序运行的入口方法。
2.2MineArea类
MineArea类是javax.swing包中JPanel容器的子类,实现了ActionListener和MouseListener接口,所创建的对象:
mineArea是MineGame类中最重要的成员之一,作为一个容器添加到MineGame窗口的中心。
标明MineArea类的主要成员变量、方法以及和MineGame类之间组合关系的UML图如图2-2所示。
以下是UML图中有关数据和方法的详细说明。
1)成员变量
a.Block是Block类型的数组,用来确定雷区有多少需进行扫雷的方块。
b.blockView是Blockview类型的数组,负责为block数组中的Block对象提供视图。
c.Lay是LayMines类型的对象,负责设置block数组中的哪些方块是雷或不是雷。
d.Record负责提供保存成绩的界面,是一个对话框,默认不可见。
用户只有扫雷成功后(用时最少),才能看见该对话框。
e.reStart是一个按钮对象,用户单击它重新开始游戏。
f.time是计时器对象,负责计算用户的用时。
2)方法
A.initMineArea(int,int,int,int)方法可根据参数提供的数据设置雷区的宽度,高度,雷的数目以及雷区的级别。
B.actionPerformed(ActionEvent)是MIneArea类实现ActionListener接口中的方法。
当用户单击blockView中的某个方块时,actionPerformed(ActionEvent)方法负责执行有关算法,例如,当用鼠标左键单击方块上的按钮后,若该方块下有雷,actionPerformed(ActionEvent)方法将使用户输掉本局,若该方块下又雷,actionPerformed(ActionEvent)方法将显示BlockView对象中的标签,该标签上是一个数字,该数字代表当前方块的周围的8个方块中总共有多少颗雷。
C.show()方法是一个递归方法。
actionPerformed(ActionEvent)方法执行时将调用show方法进行扫雷。
D.mousePress(MouseEvent)方法是MineArea类实现的MouseListener接口中的方法,当用户按下鼠标右键时,mousePress(MouseEvent)方法负责让方块上显示一个探雷标记。
E.inquireWin()方法用来判断用户是否扫雷成功,如果成功该方法负责让record对话框可见。
所谓扫雷成功是指不仅找到了全部的雷而且用时最少。
2.3Block类
Block对象负责封装雷区中方块中的数据以及对这些数据的操作,外观效果由Blockview负责提供(见后面的BlockView)。
Block类创建的对象是数组block的单元的对象。
Block型数组block是MineArea类的重要成员之一。
标明Block类的主要成员变量和方法以及和MineArea类之间的组合关系的UML图如下图2-3所示。
图2-3Block类的UML图
以下是UML图中有关数据的方法的详细说明。
1)成员变量
a.name是方块上的名字。
b.aroundMineNumber是方块周围雷的数目。
c.mineIcon是方块上雷的图标。
d.sMine用来表示方块是否是雷。
e.isMark用来表示方块是否被标记。
f.isOpen用来表示方块是否被挖开。
2)方法
A.setAroundMineNumber(int)方法用来设置aroundMineNumber的值。
B.getAroundMineNumber()方法用来获取aroundMineNumber的值。
2.4BlockView类
BlockView创建的对象负责为Block对象提供视图,以便用户通过该视图与Block对象交互。
BlockView对象使用一个标签和按钮为Block对象提供视图,标签和按钮按着卡片布局层叠在一起,默认状态按钮遮挡住标签。
当用户单击按钮后,如果Block对象时雷,BlockView对象中的标签显示的事雷的图标;如果Block对象不是雷,标签显示的是周围雷的总数。
BlockView类是javax。
swing包中JPanel类的一个子类,创建的对象是数组blockView的单元中的对象。
BlockView型数组BlockView是MineArea类的重要成员之一。
标明BlockView类的主要成员变量和方法以及和MineArea类之间的组合关系的UML图如图2-4所示。
图2-4BlockView类的UML图
以下是UML图中有关数据的方法的详细说明。
1)成员变量
a.blockNameOrIcon用来显示Block对象的name,number和mineIcon属性。
b.blockCover用来遮挡blockNameOrIcon。
c.card卡片布局。
2)方法
A.giveView(Blockblock)方法给参数指定的Block对象提供视图,如果Block对象的isMine属性为true,即方块是雷,那么blockNameOrIcon标签上设置的文本就是Block对象的name属性的值,同时blockNameOrIcon标签上设置的图标就是Block对象的mineIcon指定的图标。
如果Block对象的isMine属性为false,blockNameOrIcon标签上设置的图标就是Block对象的aroundMineNumber属性的值,及周围雷的数目
B.seeblockNameOrIcon()方法让用户看见视图中的标签,无法看见按钮。
C.seeblockNameOrIcon(0方法让用户看见视图中的按钮,无法看见标签。
2.5LayMines类
LayMines对象使用随机算法制定MineArea对象中的哪些Block对象是雷,哪些对象不是雷,没有可现实的效果图。
LayMines创建的对象Lay是MineArea中的重要成员,表明该类的主要成员变量和方法以及和MineArea类之间组合关系的UML图如图2-5所示。
图2-5LayMines类的UML图
以下是UML图中有关数据的方法的详细说明。
1)成员变量
mineIcon用来存放一个格式为gif的图像。
2)方法
layMinesForBlock(Block[][],in)方法对参数指定的Block数组进行设置,其中int参数指定雷的数目,当指定Block数组中每个单元中的方块是雷时,就将该房快上的图标设置为mineIcon,当指定Block数组中每个单元中的方块不是雷时,就将该方块的名字设置为周围的雷的数目。
2.6Record类
Record创建的对象负责提供保存成绩的界面。
Record是javax。
swing包中jDialog对话框的子类,并实现了ActionListener接口。
Record创建的对象:
record是MineArea类的成员之一,当用户扫雷成功时,该对象提供了保存成绩到文件的界面。
标明Record类的主要成员变量,方法以及和MineArea类之间组合关系的UML图如图2-6所示。
图2-6Record类的UML图
以下是UML图中有关数据的方法的详细说明。
1)成员变量
·textName提供用户扫雷优胜者输入姓名
·用户单击”确定“按钮,可以保存成绩
2)方法
·actionPerformed(ActionEvent)方法是Record类实现的ActionListener接口中的方法,当用户单击”确定“按钮后,该方法被执行,所执行的操作就是获取用户输入的名字和用时然后调用writeRecord(String,String)方法将信息写入”英雄榜“中。
·writeRecord(String,String)方法负责将有关信息扫雷用时,扫雷级别,扫雷优胜者姓名等心思写入到”英雄榜“文件。
2.7ShowRecord类
ShowRecord创建的对象负责提供显示成绩的界面。
ShowRecord是javax。
swing包中JDialog对话框的子类,并实现了ActionListener接口。
ShowReacord创建的对象showHeroRecord是MineGame类的成员之一,当用户选择查看"英雄榜“菜单项时,该对话框可见,提供了查看扫雷的最好成绩的界面。
标明ShowRecord类的主要成员变量,方法以及和MineGame类之间组合关系的UML图如图2-7所示。
图2-7ShowRecord类的UML图
以下是UML图中有关数据的方法的详细说明。
1)成员变量
·File存放文件的引用
·用户单击”显示成绩“按钮,可以查看各个级别扫雷的最好成绩。
·用户单击”重新计分“按钮,可以将”英雄榜“中的成绩恢复为初始值。
2)方法
·actionPerformed(ActionEvent)方法是ShowRecord类实现的ActionListener接口中的方法,当用户单击”显示成绩“按钮后,该方法被执行,所执行的操作就是调用readAndShow()方法。
·readAndShow()方法负责读取存放在文件中的各个级别的扫雷最好成绩以及扫雷者姓名,并显示这些相关信息。
2.8userDefine类
userDefine是java.awt包中Rame框架的子类,并实现了ActionListener接口。
userDefine创建的对像:
usedefine是MineArea类的成员之一,当用户点击菜单栏中的游戏->自定义时,弹出界面,在界面的文本框中输入相应的数字。
然后单击确定即可,或者单击取消退出界面。
标明userDefine类的主要成员变量、方法以及和MineArea类之间的组合关系的UML图如图2-8所示。
以下是UML图中有关数据和方法的详细说明。
1)成员变量
a.row,colum,mineCount,score:
分别用来显示行数,列数,雷数,分数
b.row1,colum1,mineCount1,score1:
用来自定义雷区的长度值,宽度值,所有的雷数值以及每赢一局所得的分数
c.ex1,ex2,ex3,ex4:
:
用来说明上述内容
d.con1,con2,con3,con4:
用来装Label和TextFiled,以方便布局
e.确定,取消;单击“确定”后,如果输入的内容合法,就会实现自定义的雷区,如果不合法的话,就会弹出一个警告框,提示输入有误;单击“取消”退出自定义窗口。
2)方法
actionPerformrd(ActonEvent)方法是userDefine类中实现的ActionListener接口中的方法,当用户单击界面的“确定”,该方法被执行,所执行的操作就是,将用户输入的信息传入程序,实验自定义雷区的难度级别。
当用户单击界面的“取消”,该方法被执行,所执行的操作就是,退出用户自定义界面。
3编码实现
各个类的的主要源代码实现如下:
3.1MineGame.java(主类)
importjava.awt.event.*;//包含事件类
importjava.awt.*;//包含抽象窗口工具集中的图形文本、窗口GUI类
importjavax.swing.*;//包含SWING组件
importjavax.swing.Box.Filler;
importjavax.swing.border.*;//包含布局类
importjava.util.*;//包含有用的数据类型类
importjava.util.List;
importjava.io.*;//包含输入流和输出流类
importjavax.swing.ImageIcon;//包含图标
publicclassMineGameextendsJFrameimplementsActionListener{
JMenuBarmenubar;//负责创建菜单条
JMenuItem开始,初级,中级,高级,扫雷英雄榜,自定义,退出,关于;//负责创建菜单项
JMenufileMenu,helpMenu;//负责创建菜单
ImageIconapp;//负责创建标题栏的图标
JLabell1,l2,l3,l4;
JTextAreata;
MineAreamineArea=null;
File英雄榜=newFile("英雄榜.txt");//创建文件保存记录
Hashtablehashtable=null;
ShowRecordshowHeroRecord=null;
userDefineuserdefine=newuserDefine();//调用userDefine类
MineGame(){
mineArea=newMineArea(8,8,10,1);
add(mineArea,BorderLayout.CENTER);
app=newImageIcon("app.gif");//给标题栏创建图标
setIconImage(app.getImage());//获取图标并调用类实现
setTitle("扫雷");//加入标题字段
menubar=newJMenuBar();//创建菜单条
JMenufileMenu=newJMenu("游戏(G)");//创建菜单
JMenuhelpMenu