西安科技大学
软件工程课程设计报告
题目: 扫雷游戏开发 班级: 计科0901班 学号: xxxxxxxxxxxx 姓名: xxxxxxx 电话:xxxxxxxxxxxxx
2012年7月
目 录
1 绪论…………………………………………………………………… 3 选题目的及意义…………………………………………………… 3 系统概述…………………………………………………………… 3 2 可行性研究报告……………………………………………………… 4 3 需求规格说明书……………………………………………………… 5 4 总体设计说明书……………………………………………………… 6 5详细设计说明书……………………………………………………… 7 6 系统实现……………………………………………………………… 16 开发环境…………………………………………………………… 16 关键技术…………………………………………………………… 16 运行结果…………………………………………………………… 16 7测试分析报告…………………………………………………………… 17 8心得体会………………………………………………………………… 19
参考文献
1.绪论
选题目的及意义
随着现在生活节奏的加快,人们在工作学习之余需要一个轻松娱乐的放松环境。因此我编写此软件的目的,一方面作为初学者来了解java环境下的小程序开发,另一方面使用户能在娱乐休闲的同时拓展思维能力。扫雷是单人计算机游戏。游戏的用户界面由小方格组成的战场构成。当游戏开始时,计算机将固定的地雷数随机的放到战场的方格。此游戏还允许玩家指定战场中的地雷数。
参考Windows 操作系统提供的扫雷游戏,改进扫雷游戏程序, 增加以下功能:在主界面中添加一个菜单栏,菜单栏中包括游戏和帮助两个菜单,其中游戏菜单中设置初级、中级、高级、自定义、声音、扫雷英雄榜这几个菜单项,帮助菜单中设置游戏规则和制作人员两个菜单项。
背景说明:
a.软件名称:扫雷
b.用户:所有扫雷游戏爱好者
系统概述
扫雷游戏的基本要求
Windows 2000/XP系统提供的扫雷游戏是一个很有趣的游戏。本章的课程设计使
用Java语言编写一个与其类似的扫雷游戏。具体要求如下:
(1) 扫雷游戏分为初级、中级和高级三个级别。单击游戏菜单可以选择“初级”、“中级”和“高级”。
(2) 选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键单击‘“开始”便启动计时器。
(3) 用户要揭开某个方块,可左键单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下无雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。
(4) 如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。
(5)当用户点中雷时,将有“你输了”的提示出现,胜利时,将有“你赢了”的提示出现。
需实现的主要功能
用户可以自定义级别并且可以任意输入雷数;
具有计时功能,即显示用户完成移动盘子所花费的时间。
2 可行性研究报告
技术可行性分析
本程序是java平台下的windows应用程序,总体规模较小适合个人单独完成。开发人
员是和软件专业相关的学生,有软件开发方面的基础,有能力完成该程序的设计及开发工作。
时间和资源可行性分析
(1)本程序按预定计划进行,有足够的时间完成 (2)预算中的人员可全天候的进行软件开发工作 (3)按照课程设计时间及安排,计划如下:
a.课程设计之前: 查阅资料,确定题目; b. 搜集资料,调研分析。 c.系统分析与设计。 d.系统实现/测试。
e.整理文档,成果验收,提交设计报告。
所以有充分的时间进行软件开发工作,所以硬件方面的资源可得到满足。
软件要实现的功能及可行性 详情见需求分析
3需求规格说明书
需求分析 功能需求:
功能 简介 随机布雷 自定义雷的数量 计时 难度级别选项 游戏结束提示 自定义雷的数量界面 程序主界面 可以由电脑进行随机布雷 可以由用户自定义雷的数量 有计时装置,可以自开始扫雷后自动记时 各个级别的难度对应雷的数量的不同 在游戏结束时会出现提示对话框,并停止计时 自定义雷的数量界面 程序运行的主界面 运行环境需求: 基于J2SE平台的SDK1.6版本的java程序开发环境 硬件需求:
a. 处理器型号:奔腾III及同等型号以上处理器
b. 内存容量:512MB以上内存(可运行数据库管理系统) c. 外存容量:5G以上硬盘空间 d. 联机或脱机:脱机
e.输入及输出设备的型号和数量:鼠标、彩色显示器
软件需求:
编译程序:控制需求:使用全鼠标控制
4 总体设计说明书
在设计扫雷游戏时,需要编写9个Java源文件:、、、、、、、、ruleShow
扫雷游戏除了需要编写上述java 源文件所给出的类外,还需要Java 系统提供的一些重要的类,如File、JButton、和Jlabel等类。扫雷游戏所用到的一些重要的类以及之间的组合关系如下图所示:
File
Block BlockView MineGame MineArea ShowRecord LayMines voiceShow useDefine ruleShow JLable JButton
图4-1 类之间的组合关系
5详细设计说明书
类 UML类图
MineGame类是 包中Jframe的一人子类,并实现了ActionListener接中,标明该类的主要成员变量和方法的UML图如下图所示:
图5-1-1 MineGame类的UML图
以下是UML图中有关数据和方法的详细说明。 1)成员变量
· bar和fileMenu提供菜单操作,单击游戏菜单中的选项为“初级”“中级”“高级”“自定义”“背景声音”“退出”“游戏规则”等
·MineArea 是扫雷区域,提供有关扫雷的主要功能。 ·userdefine负责用户自定义功能 ·VoiceShow 负责背景音乐功能 ·ruleshow负责显示游戏规则功能 2)
·MineGame()是构造方法,负责完成窗口的主要功能
·actionPerformed(ActionEvent)方法是MineGame类实现的ActionLister接口中的方法,该方法负责执行菜单发出的有关命令。用户选择菜单项可以触发ActionEvent事件,导致actionPerformed(ActionEvent)方法执行相应的操作,例如将mineAreaw创建的雷区设置为初级,中级,高级等。
·Main(String[])方法是程序的入口方法
MineArea
效果图:
图5-2-1 MineArea创建的扫雷区域效果图
UML图
MineArea类是包中JPanel容器的子类,实现了ActionListener和MouserListener接口,所创建的对象:mineArea是MineGame类中最重要的成员之一,作为一个容器添加到
MineGame窗口的中心。标明MineArea类的主要成员变量、方法以及和MineGame类之间组合关系的UML图如下所示:
图5-2-2 MineGame类之间组合关系的UML图
以下是UML图中有关数据和方法的详细说明。 1)成员变量
·Block是Block类型的数组,用来确定雷区有多少需进行扫雷的方块。
·blockView是Blockview类型的数组,负责为block数组中的Block对象提供视图。 ·Lay是LayMines类型的对象,负责设置block数组中的哪些方块是雷或不是雷。
·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对话框可见。所谓扫雷成功是指不仅找到了全部的雷而且用时最少。
Block类 效果图
Block对象负责封装雷区中方块中的数据以及对这些数据的操作,外观效果由Blockview负责提供(见后面的BlockView)。
.2UML图
Block类创建的对象是数组block的单元的对象。Block型数组block是MineArea类的重要成员之一。标明Block类的主要成员变量和方法以及和MineArea类之间的组合关系的UML图如下图所示:
图5-3-1 Block类的UML图
以下是UML图中有关数据的方法的详细说明。
1)成员变量
·name是方块上的名字。
·aroundMineNumber是方块周围雷的数目。 ·mineIcon是方块上雷的图标。
·sMine用来表示方块是否是雷。 ·isMark用来表示方块是否被标记。 ·isOpen用来表示方块是否被挖开。 2)方法
·setAroundMineNumber(int)方法用来设置aroundMineNumber的值。 ·getAroundMineNumber()方法用来获取aroundMineNumber的值。
BlockView类 效果图
BlockView创建的对象负责为Block对象提供视图,以便用户通过该视图与Block对象交互。BlockView对象使用一个标签和按钮为Block对象提供视图,标签和按钮按着卡片布局层叠在一起,默认状态按钮遮挡住标签。当用户单击按钮后,如果Block对象时雷,BlockView对象中的标签显示的事雷的图标;如果Block对象不是雷,标签显示的是周围雷的总数。效果如下图所示:
图5-4-1 BlockView对象
UML图
BlockView类是javax。swing包中JPanel类的一个子类,创建的对象是数组blockView的单元中的对象。BlockView型数组BlockView是MineArea类的重要成员之一。标明BlockView类的主要成员变量和方法以及和MineArea类之间的组合关系的UML图如下图所示:
图5-4-2 MineArea类的UML图
以下是UML图中有关数据的方法的详细说明。
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方法让用户看见视图中的按钮,无法看见标签。
LayMines类 效果图
LayMines对象使用随机算法制定MineArea对象中的哪些Block对象是雷,哪些对象不是雷,没有可现实的效果图。
图
LayMines创建的对象Lay是MineArea中的重要成员,表明该类的主要成员变量和方法以及和MineArea类之间组合关系的UML图如下图:
图5-5-1 LayMines类的UML图
以下是UML图中有关数据的方法的详细说明。 1)成员变量
mineIcon用来存放一个格式为gif的图像。 2)方法
layMinesForBlock(Block[][],in)方法对参数指定的Block数组进行设置,其中int参数指定雷的数目,当指定Block数组中每个单元中的方块是雷时,就将该房快上的图标设置为mineIcon,当指定Block数组中每个单元中的方块不是雷时,就将该方块的名字设置为周围的雷的数目。
userDefine 类 效果图
图5-6-1 自定义窗口
UML图
userDefine是包中Rame框架的子类,并实现了ActionListener接口。userDefine创建的
对像:usedefine是MineArea类的成员之一,当用户点击菜单栏中的游戏->自定义时,弹出界面,在界面的文本框中输入相应的数字。然后单击确定即可,或者单击取消退出界面。标明userDefine类的主要成员变量、方法以及和MineArea类之间的组合关系的UML图如下图所示:
图5-6-2 userDefine类的UML图
以下是UML图中有关数据和方法的详细说明。 1)成员变量
·行数,列数,雷数,分数:分别用来显示行数,列数,雷数,分数
·行数1,列数1,雷数1,分数1:用来自定义雷区的长度值,宽度值,所有的雷数值以及每赢一局所得的分数
·说明1,说明2 说明3,说明4:用来说明上述内容
·容器1,容器2,容器3 :用来装Label 和TextFiled,以方便布局
·确定,取消;单击“确定”后,如果输入的内容合法,就会实现自定义的雷区,如果不合法的话,就会弹出一个警告框,提示输入有误;单击“取消”退出自定义窗口。 2)方法
actionPerformrd(ActonEvent)方法是userDefine类中实现的ActionListener接口中的方法,当用户单击界面的“确定”,该方法被执行,所执行的操作就是,将用户输入的信息传入程序,实验自定义雷区的难度级别。当用户单击界面的“取消”,该方法被执行,所执行的操作就是,退出用户自定义界面。
ruleShow 类 效果图
图5-7-1 游戏规则
UML图
ruleShow是包中JRame框架的子类,并实现了ActionListener接口。ruleShow创建的对
像:ruleshow是MineArea类的成员之一,当用户点击菜单栏中的帮助->游戏规则时,弹出界面,说明游戏 MineArea类之间的组合关系的UML图如下图所示:
图5-7-2 ruleShow类的UML图
以下是UML图中有关数据和方法的详细说明。 1)成员变量
·la1:用来显示扫雷游戏的规则如下 ·la2,la2………;用来显示下面几条游戏规则
·Con1,Con2,Con3;用来装la1,la2 以实现在JFrame中布局; ·bu1;用记单击bu1,关闭窗口; 2)方法
actionPerformrd(ActonEvent)方法是ruleShow类中实现的ActionListener接口中的方法,当用户单击界面的“确定”,该方法被执行,所执行的操作就是,并关闭界面。
所需图像
预备名字为、图像文件,分别表示扫雷时所用的“标记”图像和“雷”的图像
所需音频
准备好 爆炸声.wav、林宥嘉 –说谎.wav 和我舍不得-弦子.wav 等音频文件(注意,一定要是wav格式的音频文件)其中爆炸声.wav 用于Minearea 中,当点到雷就会发出声音,其它用于voiceShow中用来显示背景音乐。
6 系统实现
开发环境:本系统的设计采用的是java语言开发 关键技术:在Windows 操作系统支持下, 运行结果 初始界面
图6-3-1初始界面
6.3.2 单击游戏->自定义->确定
图 6-3-2 自定认界面 图6-3-3自定义游戏难度
.3 单击 游戏->背景声音->一次播放
图 6-3-4 背景音乐界面 图6-3-5播放音乐
单击 帮助->游戏规则
图 6-3-6 游戏规则界面
7测试分析报告
程序调试是指对程序的查错和排错。为了便于查错、阅读,在设计该程序的过程中我们采用了结构化程序方法编辑,添加了尽可能多的注释,这就为接下来的调试过程带来了很多方便。
经过仔细检查之后进行上机调试。进行编译,如果在编译(javac命令)和连接(java命令)过程中发现错误,屏幕上显示了出错信息,根据提示找到出错的位置,加以改正,再进行编译……如此反复,直到顺利通过编译和连接为止。
在本次实习过程中碰到的编译、连接的错误主要有:缺少变量定义,定义位置不正确、语法错误、注释的位置,粗心少写大括号等。
错误解决方法:
(1)缺少变量定义,定义位置不正确;
由于该程序相对来讲稍有些长,前后有些变量不容易联系起来,但是在错误信息的提示下一般还是很容易找到。不过需要注意的是在定义的时候有些方法使用同样的变量名而表示不同的作用,因而使用要很小心,定义及定义的位置要特别留意。为减少这样的错误我后来还是用不同的变量名来表示,结果引起的那些错误解决了。
(2)语法错误;
大多的语法错误在通过书本参考下能够修改。主要是平时缺乏锻炼、不太注意而产生的。如没有注意具体数据使用是有一定的范围限定;过分重视分号的重要性而在for、if、while语句中画蛇添足加分号等。
(3)注释的位置;
程序设计中在注释的时候不能同我们平常写字一样随心所欲,我们应该注意注释的格
式。
8心得体会
课程设计是本学科学习阶段一次非常难得的理论与实际相结合的机会,通过这次比较完整的一个程序的设计,可以摆脱单纯的理论知识学习状态,和实际设计的结合锻炼了我的综合运用所学的基础知识,解决实际问题的能力,同时也提高我查阅文献资料、对程序整体的把握等其他能力水平,而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼,经验得到了丰富。
完成本次课程设计给了我很大的信心,但是也让多不足的地方,学习其实就是一个不断完善的过程,正视自己的不足之处,在以后的工作和学习中不断的弥补这些不足之处,在以后的生活中也要保持同样的态度,不断的完善自己。 参考文献
[1] Java课程设计(第二版) 清华大学出版社 耿祥义 张跃平 [2] Java2实用教程(第三版) 清华大学出版社 耿祥义 等
[3]孙卫琴. 精通Struts:基于MVC的Java Web设计与开发.北京:电子工业出版社, [4]《JAVA 语言与面向对象程序设计》 . 印 旻 . 清华大学出版社。 [5]《 JavaApplet 实例编程》,赤金、聂松编著,中国水利水电出版社
[6]《 Java2 核心》第二版窗体底端 [7]Sun中国技术社区 [8]Java之家
因篇幅问题不能全部显示,请点此查看更多更全内容