Java扫雷游戏课程设计.docx
- 文档编号:24961416
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:53
- 大小:668.31KB
Java扫雷游戏课程设计.docx
《Java扫雷游戏课程设计.docx》由会员分享,可在线阅读,更多相关《Java扫雷游戏课程设计.docx(53页珍藏版)》请在冰豆网上搜索。
Java扫雷游戏课程设计
Java课程设计
题目:
扫雷游戏
…
系别信息与计算科学
专业班级信息与计算科学091班
学生姓名余启张昱宋加望
指导教师贺慧琳
提交日期2012年5月25日
总体设计3
MineGame类4
MineArea5
Block类7
BlockView类7
LayMines类9
Record类9
ShowRecord类10
userDefine类11
voiceShow类13
ruleShow类14
authorShow类16
所需图像17
所需音频17
整体效果17
一、设计目的
通过选择《Java课程设计(第二版)》中扫雷游戏,这个综合性的题目作为本次的课程设计。
可以让我们更加熟悉Java程序设计这门课程,学会熟练使用Jcreator这个软件,加深对Java语言的掌握,提高编程水平。
同时培养独立思考和同学间团结合作的能力,为毕业设计以及将来的工作打下坚实的基础。
二、设计要求和设计指标
参考Windows2000/XP系统提供的扫雷游戏,改进扫雷游戏程序,增加以下功能:
在主界面中添加一个菜单栏,菜单栏中包括游戏和帮助两个菜单,其中游戏菜单中设置初级、中级、高级、自定义、声音、扫雷英雄榜这几个菜单项,帮助菜单中设置游戏规则和制作人员两个菜单项。
3、设计内容
总体设计
在设计扫雷游戏时,需要编写个Java源文件:
、、、、、、、、、、ruleShow
扫雷游戏除了需要编写上述java源文件所给出的类外,还需要Java系统提供的一些重要的类,如File、JButton、和Jlabel等类。
扫雷游戏所用到的一些重要的类以及之间的组合关系如图1所示:
图1类之间的组合关系
MineGame类
3.2.1.效果图(如下图2)
图2MineGame创建的窗口
3.2.2UML类图
MineGame类是包中Jframe的一个子类,并实现了ActionListener接中,标明该类的主要成员变量和方法的UML图如图3所示
图3MineGame类的UML图
以下是UML图中有关数据和方法的详细说明。
1)成员变量
·bar和fileMenu提供菜单操作,单击游戏菜单中的选项为“初级”“中级”“高级”“自定义”“扫雷英雄榜”“背景声音”“退出”“游戏规则”“制作人”等
·MineArea 是扫雷区域,提供有关扫雷的主要功能。
·“英雄榜”负责存放三个级别的扫雷最好成绩。
·showheroRecord负责显示英雄榜中的数据
·userdefine负责用户自定义功能
·VoiceShow 负责背景音乐功能
·ruleshow负责显示游戏规则功能
·authorshow负责显示作者功能
2)
·MineGame()是橘色造方法,负责完成窗口的主要功能
·actionPerformed(ActionEvent)方法是MineGame类实现的ActionListerer接口中的方法,该方法负责执行菜单发出的有关命令。
用户选择菜单项可以触发ActionEvent事件,导致actionPerformed(ActionEvent)方法执行相应的操作,例如将mineAreaw创建的雷区设置为初级 中级 高级等
·Main(String[])方法是程序的入口方法
3.2.3代码(见附录1)
MineArea
3.3.1效果图:
(见下图4)
图4MineArea创建的扫雷区域效果图
3.3.2UML图
MineArea类是包中JPanel容器的子类,实现了ActionListener和MouserListener接口,所创建的对象:
mineArea是MineGame类中最重要的成员之一,作为一个容器添加到MineGame窗口的中心。
标明MineArea类的主要成员变量、方法以及和MineGame类之间组合关系的UML图如图5:
图5MineGame类之间组合关系的UML图
以下是UML图中有关数据和方法的详细说明。
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.3.3代码(见附录2)
Block类
3.4.1.效果图
Block对象负责封装雷区中方块中的数据以及对这些数据的操作,外观效果由Blockview负责提供(见后面的BlockView)。
3.4.2.UML图
Block类创建的对象是数组block的单元的对象。
Block型数组block是MineArea类的重要成员之一。
标明Block类的主要成员变量和方法以及和MineArea类之间的组合关系的UML图如下图6:
图6Block类的UML图
以下是UML图中有关数据的方法的详细说明。
1)成员变量
·name是方块上的名字。
·aroundMineNumber是方块周围雷的数目。
·mineIcon是方块上雷的图标。
·sMine用来表示方块是否是雷。
·isMark用来表示方块是否被标记。
·isOpen用来表示方块是否被挖开。
2)方法
·setAroundMineNumber(int)方法用来设置aroundMineNumber的值。
·getAroundMineNumber()方法用来获取aroundMineNumber的值。
3.4.3代码(见附录3)
BlockView类
3.5.1.效果图
BlockView创建的对象负责为Block对象提供视图,以便用户通过该视图与Block对象交互。
BlockView对象使用一个标签和按钮为Block对象提供视图,标签和按钮按着卡片布局层叠在一起,默认状态按钮遮挡住标签。
当用户单击按钮后,如果Block对象时雷,BlockView对象中的标签显示的事雷的图标;如果Block对象不是雷,标签显示的是周围雷的总数。
效果如图7所示:
图7BlockView对象
3.5.2.UML图
BlockView类是javax。
swing包中JPanel类的一个子类,创建的对象是数组blockView的单元中的对象。
BlockView型数组BlockView是MineArea类的重要成员之一。
标明BlockView类的主要成员变量和方法以及和MineArea类之间的组合关系的UML图如图8:
图8MineArea类的UML图
以下是UML图中有关数据的方法的详细说明。
1)成员变量
·blockNameOrIcon用来显示Block对象的name,number和mineIcon属性。
·blockCover用来遮挡blockNameOrIcon。
·card卡片布局
2)方法
·giveView(Blockblock)方法给参数指定的Block对象提供视图,如果Block对象的isMine属性为true,即方块是雷,那么blockNameOrIcon标签上设置的文本就是Block对象的name属性的值,同时blockNameOrIcon标签上设置的图标就是Block对象的mineIcon指定的图标。
如果Block对象的isMine属性为false,blockNameOrIcon标签上设置的图标就是Block对象的aroundMineNumber属性的值,及周围雷的数目
·seeblockNameOrIcon()方法让用户看见视图中的标签,无法看见按钮。
·seeblockNameOrIcon(0方法让用户看见视图中的按钮,无法看见标签。
3.5.3代码(见附录4)
LayMines类
3.6.1.效果图
LayMines对象使用随机算法制定MineArea对象中的哪些Block对象是雷,哪些对象不是雷,没有可现实的效果图。
3.6.2.UML图
LayMines创建的对象Lay是MineArea中的重要成员,表明该类的主要成员变量和方法以及和MineArea类之间组合关系的UML图如图9:
图9LayMines类的UML图
以下是UML图中有关数据的方法的详细说明。
1)成员变量
mineIcon用来存放一个格式为gif的图像。
2)方法
layMinesForBlock(Block[][],in)方法对参数指定的Block数组进行设置,其中int参数指定雷的数目,当指定Block数组中每个单元中的方块是雷时,就将该房快上的图标设置为mineIcon,当指定Block数组中每个单元中的方块不是雷时,就将该方块的名字设置为周围的雷的数目。
3.6.3代码(见附录5)
Record类
3.7.1.效果图
Record创建的对象负责提供保存成绩的界面,效果如图10:
图10保存创建对话框
3.7.2.UML图
Record是javax。
swing包中jDialog对话框的子类,并实现了ActionListener接口。
Record创建的对象:
record是MineArea类的成员之一,当用户扫雷成功时,该对象提供了保存成绩到文件的界面。
标明Record类的主要成员变量,方法以及和MineArea类之间组合关系的UML图如图11:
图11Record类的UML图
以下是UML图中有关数据的方法的详细说明。
1)成员变量
·textName提供用户扫雷优胜者输入姓名
·用户单击”确定“按钮,可以保存成绩
2)方法
·actionPerformed(ActionEvent)方法是Record类实现的ActionListener接口中的方法,当用户单击”确定“按钮后,该方法被执行,所执行的操作就是获取用户输入的名字和用时然后调用writeRecord(String,String)方法将信息写入”英雄榜“中。
·writeRecord(String,String)方法负责将有关信息扫雷用时,扫雷级别,扫雷优胜者姓名等心思写入到”英雄榜“文件。
3.7.3代码(见附录6)
ShowRecord类
3.8.1.效果图
ShowRecord创建的对象负责提供显示成绩的界面,效果如图12:
图12显示成绩对话框
3.8.2.UML图
ShowRecord是javax。
swing包中JDialog对话框的子类,并实现了ActionListener接口。
ShowReacord创建的对象showHeroRecord是MineGame类的成员之一,当用户选择查看"英雄榜“菜单项时,该对话框可见,提供了查看扫雷的最好成绩的界面。
标明ShowRecord类的主要成员变量,方法以及和MineGame类之间组合关系的UML图如图13:
图13ShowRecord类的UML图
以下是UML图中有关数据的方法的详细说明。
1)成员变量
·File存放文件的引用
·用户单击”显示成绩“按钮,可以查看各个级别扫雷的最好成绩。
·用户单击”重新计分“按钮,可以将”英雄榜“中的成绩恢复为初始值。
2)方法
·actionPerformed(ActionEvent)方法是ShowRecord类实现的ActionListener接口中的方法,当用户单击”显示成绩“按钮后,该方法被执行,所执行的操作就是调用readAndShow()方法。
·readAndShow()方法负责读取存放在文件中的各个级别的扫雷最好成绩以及扫雷者姓名,并显示这些相关信息。
3.8.3代码(见附录7)
userDefine类
3.9.1效果图(如图14)
图14自定义窗口
3.9.2UML图
userDefine是包中Rame框架的子类,并实现了ActionListener接口。
userDefine创建的对像:
usedefine是MineArea类的成员之一,当用户点击菜单栏中的游戏->自定义时,弹出界面,在界面的文本框中输入相应的数字。
然后单击确定即可,或者单击取消退出界面。
标明userDefine类的主要成员变量、方法以及和MineArea类之间的组合关系的UML图如图15所示
图15userDefine类的UML图
以下是UML图中有关数据和方法的详细说明。
1)成员变量
·行数,列数,雷数,分数:
分别用来显示行数,列数,雷数,分数
·行数1,列数1,雷数1,分数1:
用来自定义雷区的长度值,宽度值,所有的雷数值以及每赢一局所得的分数
·说明1,说明2说明3,说明4:
用来说明上述内容
·容器1,容器2,容器3:
用来装Label和TextFiled,以方便布局
·确定,取消;单击“确定”后,如果输入的内容合法,就会实现自定义的雷区,如果不合法的话,就会弹出一个警告框,提示输入有误;单击“取消”退出自定义窗口。
2)方法
actionPerformrd(ActonEvent)方法是userDefine类中实现的ActionListener接口中的方法,当用户单击界面的“确定”,该方法被执行,所执行的操作就是,将用户输入的信息传入程序,实验自定义雷区的难度级别。
当用户单击界面的“取消”,该方法被执行,所执行的操作就是,退出用户自定义界面。
3.9.3代码(见附录8)
voiceShow类
3.10.1效果图(如图16)
图16背景音乐窗口
3.10.2UML图
voiceShow是包中Rame框架的子类,并实现了ActionListener接口。
voiceShow创建的对像:
voiceshow是MineArea类的成员之一,当用户点击菜单栏中的游戏->背景音乐时,弹出界面,单击下拉列表,选择背景音乐,然后单击一次播放,就可以实现有背景音乐,循环播放和停止播放类似。
标明author类的主要成员变量、方法以及和MineArea类之间的组合关系的UML图如图17所示
图17voiceShow类的UML图
以下是UML图中有关数据和方法的详细说明。
1)成员变量
·la1:
用来显示“选择播放曲目”
·Ch1:
音乐选择下拉列表
·Bu1,bu2,bu3;分别表示一次播放,循环播放,停止播放,单击后实现相应的功能
·url;用来表示所选择音乐的URL
·clip:
音乐播放中类,用以实现音乐的播放功能:
·str,str1;表示所选择音乐的Itme的值
2)方法
actionPerformrd(ActonEvent)方法是voiceShow类中实现的ActionListener接口中的方法,当用户单击界面的“一次播放”,该方法被执行,所执行的操作就是,开始播放音乐。
当用户单击界面的“循环播放”,该方法被执行,所执行的操作就是,开始循环播放音乐。
当用户单击界面的“停止”,该方法被执行,所执行的操作就是,停止正在播放音乐。
3.10.3代码(见附录9)
ruleShow类
3.11.1效果图(如图18)
图18游戏规则
3.11.2UML图
ruleShow是包中JRame框架的子类,并实现了ActionListener接口。
ruleShow创建的对像:
ruleshow是MineArea类的成员之一,当用户点击菜单栏中的帮助->游戏规则时,弹出界面,说明游戏,标明author类的主要成员变量、方法以及和MineArea类之间的组合关系的UML图如图19所示
图19ruleShow类的UML图
以下是UML图中有关数据和方法的详细说明。
1)成员变量
·la1:
用来显示扫雷游戏的规则如下
·la2,la2………;用来显示下面几条游戏规则
·Con1,Con2,Con3;用来装la1,la2以实现在JFrame中布局;
·bu1;用记单击bu1,关闭窗口;
2)方法
actionPerformrd(ActonEvent)方法是ruleShow类中实现的ActionListener接口中的方法,当用户单击界面的“确定”,该方法被执行,所执行的操作就是,并关闭界面。
3.11.3代码(见附录10)
authorShow类
3.12.1效果图(如图20)
图20作者及意见
3.12.2UML图
authorShow是包中JRame框架的子类,并实现了ActionListener接口。
authorShow创建的对像:
authorshow是MineArea类的成员之一,当用户点击菜单栏中的帮助->制作人时,弹出界面,说明作者信息以及传入用户提交的建议,标明author类的主要成员变量、方法以及和MineArea类之间的组合关系的UML图如下所示
以下是UML图中有关数据和方法的详细说明。
1)成员变量
·bu1:
用户单击bu1,可以提交用户输入的信息以及关闭窗口
·tx1:
用来输入用户的建议
·la1,la2……:
用来显示作者信息
2)方法
actionPerformrd(ActonEvent)方法是authorShow类中实现的ActionListener接口中的方法,当用户单击界面的“确定”,该方法被执行,所执行的操作就是将用户的建议与意见保存在一个文档中,并关闭界面。
3.12.3代码(见附录11)
所需图像
预备名字为、、、、图像文件,其中、分别是扫雷时所用的“标记”图像“雷”的图像,、、用于authorShow中作者的图像。
所需音频
准备好爆炸声.wav、猜不透.wav、范逸臣不说出的温柔.wav、林宥嘉–说谎.wav和我舍不得弦子.wav等音频文件(注意,一定要是wav格式的音频文件)其中爆炸声.wav用于Minearea中,当点到雷就会发出声音,其余用于voiceShow中用来显示背景音乐。
整体效果
3.15.1初始界面(图21)
图21初始界面
3.15.2单击游戏->自定义->确定(图22、23)
图22自定认界面图23自定义游戏难度
3.15.3单击游戏->背景声音->一次播放(图24、25)
图24背景音乐界面图25播放音乐
3.15.4单击帮助->游戏规则(图26)
图26游戏规则界面
3.15.5单击帮助->制作人(图27)
图27作者及意见
四、本设计改进建议
1、界面的美观性做的不太好,比如说布局,颜色搭配有待改进
2、背景音乐在播方的时候有一点小问题,比如单击停止播放,音乐并没有停止,需要单击2次或多次;另外背景音乐似乎很占内存,运行的时候容易死机。
3、MineGame的初始化界面大小难以控制,特别是在自定义的情况下,需在手动改面窗口的大小。
五、总结(感想和心得等)
1、做完之后,确实有一点成就感,这种感觉激励着自已更加努力的学习这门课程
2、编程的进程肯定会遇到困难,要充分利用现有的资源 比如说互联网,书籍,这次实验多亏在在网上找的Java API,帮助我解决了不小困难。
3、要有团队合作精神,很感谢我的认友在这次实验给予我的帮助。
六、主要参考文献
[1]Java课程设计(第二版)清华大学出版社耿祥义张跃平
[2]Java2实用教程(第三版)清华大学出版社耿祥义等
[3]孙卫琴.精通Struts:
基于MVC的JavaWeb设计与开发.北京:
电子工业出版社,
[4]《JAVA语言与面向对象程序设计》.印旻.清华大学出版社。
[5]《JavaApplet实例编程》,赤金、聂松编著,中国水利水电出版社 [6]《Java开发利器——Eclipse从入门到精通》张峰科技编,清华大学出版社[7]《Java2核心》第二版窗体底端[8]Sun中国技术社区[9]Java之家[10]Apache社区附录
附录1:
import.*;
import.*;
import.*;
import.*;
importclassMineGameextendsJFrameimplementsActionListener
{
JMenuBarbar;
JMenufileMenu,fileMenu1;xt");
Hashtablehashtable=null;
ShowRecordshowHeroRecord=null;
userDefineuserdefine=newuserDefine();etAccelerator,);etAccelerator,);etAccelerator,);etAccelerator,);etAccelerator,);etAccelerator,);etAccelerator,);etAccelerator,);etAccelerator,);ddActionListener(this);
中级.addActionListener(this);
高级.addActionListener(this);
扫雷英雄榜.addActionListener(this);
自定义.addActionListener(this);ddActionListener(this);ddActionListener(this);ddActionListener(this);ddActionListener(this);
hashtable=newHashtable();
("初级","初级#"+999+"#匿名");
("中级","中级#"+999+"#匿名");
("高级","高级#"+999+"#匿名");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 扫雷 游戏 课程设计