1、I目录1 课程设计目的 12 功能描述 12.1 设计背景 12.2 需求分析 13 设计方案论证 23.1 概要设计 23.2 设计流程图 44 详细设计 54.1 MineGame 类 .54.2 MineArea 类 .54.3 Block 类 64.4 BlockView 类 64.5 LayMines 类 .74.6 Record 类 .74.7 ShowRecord 类 .85 运行结果分析 96 设计体会 .11参考文献 .1311 课程设计目的本次课程设计是用 Java 语言及相关知识设计一个扫雷游戏系统,完成扫雷游戏的基本功能,并在此基础上,自行完善和优化系统功能。理解掌握选
2、择游戏级别,记录游戏时间和保存游戏成绩的方法,学习程序设计的基本思路和方法,培养计算机专业学生运用所学知识解决计算机应用领域内实际问题能力,进一步提高自身动手操作能力和用 Java 语言综合编程能力,程序调试技能。2 功能描述2.1 设计背景图形用户界面简称 GUI,是用图形的方式,借助菜单、按钮等标准界面元素和鼠标操作,帮助用户方便地向计算机系统发出指令、启动操作,并将系统的运行结果同样以图形的方式显示给用户的技术。JAVA 的图形用户界面技术即为使用 java.awt 包来创建图形界面的方法,包括 AWT 组件、窗口和菜单设计、布局管理期以及绘图操作等。AWT 既抽象窗口工具集,用于图形用
3、户界面的开发。AWT 的功能包括以下方面:(1)丰富的图形界面组件。(2)强大的事件处理模型图形和图形工具,暴扣形状、颜色和字体。(3)布局管理器,可以进行灵活的窗口布局,设计特定窗口的尺寸和屏幕分率。(4)无关数据传送类,可以通过本地平台的剪贴板来进行剪切和粘贴操作。打印和无鼠标操作。Java.awt 是 java 基本包中最大的一个,其中定义了所有的 GUI 组件类,以及其他用于构造图形界面的类。2.2 需求分析(1)扫雷游戏分为初级、中级和高级三个级别,扫雷英雄榜存储每个级别的最好成绩,即挖出全部的地雷且用时最少者。单击游戏菜单可以选择“初级” 、2“中级”和“高级”或查看“英雄榜” 。
4、(2)选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键单击雷区中的任何一个方块便启动计时器。(3)用户要揭开某个方块,可单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下无雷,则显示一个数字,该数字代表方块的周围的 8 个方块中共有多少颗雷。(4)如果用户认为某个方块下埋着雷,单击右键可以在方块上表示一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记一个扫雷标记(无论用户的标记是否正确) ,程序将显示的剩余雷数减少一个。(5)扫雷胜利后(用时最少者) ,程序弹出保存成绩的对话框。3 设计方案论证3.1 概要设计在设计扫雷游戏时,需要编写 7 个 Java 源程序:MineGa
5、me.java、MineArea.java、Block.java、BlockView.java、LayMines.java、Record.java 和 ShowRecord.java。扫雷游戏除了需要编写上述 7 个 Java 源文件所给出的类外,还需要 Java系统提供的一些重要的类,如 File、JButton 和 JLabel 等类。扫雷游戏所用到的一些重要的类以及之间的组合关系如图 31 所示。图 31 类之间的组与关系3.1.1 MineGame.java(主类)MineGame 类负责创建扫雷游戏机主窗口,该文件含有 main 方法,扫雷游戏从该类开始执行。MineGame 类主要
6、有三种类型的成员:File、MineArea 和ShowRecord 对象。3.1.2 MineArea.java3MineArea 类创建的对象是 MineArea 类最重要的成员之一,代表“扫雷区域” 。该类的成员变量中有 5 个重要类型的对象:Block、BlockView、LayMines和 Record。3.1.3 Block.javaBlock 类是雷区中“方块”的类封装,含有关于“方块”的属性以及操作,即负责为雷区创建代表“方块”的 Block 对象。3.1.4 BlockView.javaBlockView 是 JPanel 容器的子类,BlockView 创建的对象负责为 B
7、lock 对象提供视图,以便用户通过该视图与 Block 对象交互。BlockView 对象使用一个标签和按钮为 Block 对象提供视图,标签和按钮按着卡片布局(CardLayout)层叠在一起,默认状态下按钮遮挡住标签。当用户单击按钮后,如果 Block 对象是雷,BlockView 对象中的标签显示的是雷的图标;如果 Block对象不是是雷,标签显示的是当前 Block 对象周围雷的总数。3.1.5 LayMines.javaLayMines 类对象不需要视图,在游戏中不需要看见该对象。LayMines 对象使用随机算法指定 MineArea 对象中的哪些 Block 对象是雷,哪些 B
8、lock 对象不是雷。3.1.6 Record.javaRecord 类是 JDialog 对话框的子类,当用户扫雷成功时,Record 对象负责保存用户的成绩到文件。3.1.7 ShowRecord.javaShowRecord 类是 JDialog 对话框的子类,当用户查看扫雷的最好成功时,ShowRecord 对象负责读取文件数据的界面。43.2 设计流程图该游戏的整体设计流程图如图 32 所示:图 32 游戏设计流程图4 详细设计4.1 MineGame 类MineGame 类是 javax.swing 包中 JFrame 的一个子类,并实现了ActionListener 接口,该类的
9、主要成员变量和方法: 成员变量1) bar 和 fileMenu 提供菜单操作,单击游戏菜单中的选项为“初级” 、“中级”和“高级”或“扫雷英雄榜” 。2)mineArea 是扫雷区域,提供有关扫雷的主要功能。3) “英雄榜”负责存放三个级别的扫雷最好的成绩。4) showHeroRecord 负责显示英雄榜中的数据。 方法1) MineGame( )是构造方法,负责完成窗口的初始化。2)actionPerformed(ActionEvent)方法是 MineGame 类实现的ActionListener 接口中的方法,该方法负责执行菜单发出的有关命令。用户选择菜单中项可触发 ActionLi
10、stener 事件,导致 actionPerformed(ActionEvent)方5法执行相应的操作,例如将创建的雷区设置为初级、中级或高级等。3) main(String )方法是程序运行的入口方法。4.2 MineArea 类MineArea 类是 javax.swing 包中 JPanel 容器的子类,实现了ActionListener 和 MouseListener 接口,所创建的对象:mineArea 是MineArea 类中最重要的成员之一,作为一个容器添加到窗口的中心。MineArea类的主要成员变量、方法: 成员变量1)block 是 Block 类型的数组,用来确定雷区有多
11、少需进行扫雷的方块。2)blockView 是 BlockView 类型的数组,负责为 block 数组中的 Block 对象提供视图。3)lay 是 LayMines 类型的对象,负责设置 block 数组中的哪些方块是雷或不是雷。4)record 负责提供保存成绩的界面,是一个对话框,默认不可见。用户只有扫雷成功后(用时最少者) ,才可以看见该对话框。6)reStart 是一个按钮对象,用户单击它重新开始游戏。7)time 是计时器对象,负责计算用户的用时。 方法1)initMineArea(int,int,int,int)方法可根据参数提供的数据设置雷区的宽度、高度、雷的数量以及雷区的级
12、别。2)actionPerformed(ActionEvent)是 MineArea 类实现的 ActionListener接口中的方法。当用户单击 blockView 中的某个方块时,actionPerformed(ActionEvent)方法负责执行有关算法,例如,当用鼠标左键单击方块上的按钮后,若方块下有雷,actionPerformed(ActionEvent)方法将使用户输掉本局,若该方块下无雷,actionPerformed(ActionEvent)方法将显示 BlockView 对象中的标签,该标签上是一个数字,该数字代表当前方块的周围的 8 个方块中共有多少颗雷。3)Show(
13、 )方法是一个递归方法。actionPerformed(ActionEvent)方法执6行时将调用方法进行扫雷。4)mousePressed(MouseEvent)方法是 MineArea 类实现的 MouseListener接口中的方法,当用户按下鼠标右键时,actionPerformed(ActionEvent)方法负责让方块上线是一个探雷标记。5)inquireWin( )方法用来判断用户是否扫雷成功,如果成功该方法负责让 record 对话框可见。所谓扫雷成功是指不仅找到全部的雷而且用时最少。4.3 Block 类Block 类创建的对象是数组 block 的单元中的对象。Block
14、型数组 block是 MineArea 类的重要成员之一。Block 类的主要成员变量和方法: 成员变量1)name 是方块上的名字。2)aroundMineNumber 是方块周围雷的数目。3)mineIcon 是方块上雷的图标。4)isMine 用来表示方块是否是雷。5)isMark 用来表示方块是否被标记。6)isOpen 用来表示方块是否被挖开。 方法1)setAroundMineNumber(int)方法用来设置 aroundMineNumber 的值。2)getAroundMineNumber()方法用来获取 aroundMineNumber 的值。4.4 BlockView 类B
15、lockView 类是 javax.swing 包中 JPanel 类的子类,创建的对象是数组blockView 的单元中的对象。blockView 是 BlockView 类的最重要的成员之一。BlockView 类的主要成员变量和方法: 成员变量1)blockNameOrIcon 用来显示 Block 对象的 name、number 和 mineIcon 属性。72)blockCover 用来遮挡 card 卡片式布局。 方法1)giveView(Block block)方法给参数指定的 Block 对象提供视图,如果Block 对象的 isMine 属性为 true,即方块是雷,那么 b
16、lockNameOrIcon 标签上设置的文本就是 Block 对象的 name 属性的值,同时 blockNameOrIcon 标签上设置的图标就是 Block 对象的 mineIcon 制定的图标。如果 Block 对象的 isMine属性为 false,blockNameOrIcon 标签上设置的文本是 Block 对象的aroundMineNumber 属性的值,即周围雷的数目。2)seeBlockNameOrIcon( )方法让用户看见视图中的标签,无法看见按钮。3)seeBlockCover( )方法让用户看见视图中的按钮,无法看见标签。4.5 LayMines 类LayMines
17、 类创建的对象 lay 是 MineArea 中最重要的成员。该类的主要成员变量和方法: 成员变量mineIcon 用来存放一个格式 gif 的图像。 方法layMinesForBlock(Block,int)方法对参数指定的 Block 数组进行设置,其中 int 参数制定雷的数目。当指定 Block 数组中某个单元中的方块是雷时,就将该方块上的图标设置为 mineIcon。当指定 Block 数组中某个单元中的方块不是雷时,就将该方块上的名字设置为周围的雷的数目。4.6 Record 类Record 是 javax.swing 包中 JDialog 对话框的子类,并实现了ActionLis
18、tener 接口。Record 创建的对象:record 是 MineArea 类的成员之一,当用户扫雷成功时,该对象提供了保存成绩到文件的界面。Record 类的主要成员变量、方法: 成员变量1)textName 提供用户扫雷优胜者输出姓名。82)用户单击“确定”按钮,可以保存成绩。 方法1)actionPerformed(ActionEvent)方法是 Record 类实现的ActionListener 接口中的方法,当用户单击“确定”按钮后,该方法被执行,所执行的操作就是获取用户输入的名字和用时,然后调用writeRecord(String,String)方法将信息写入到“英雄榜”中。2
19、)writeRecord(String,String)负责将有关信息,例如扫雷的用时、扫雷的级别以及扫雷优胜者的姓名等信息写入到“英雄榜”文件。4.7 ShowRecord 类ShowRecord 是 javax.swing 包中 JDialog 对话框的子类,并实现了ActionListener 接口。ShowRecord 创建的对象 showHeroRecord 是 MineGame 类(主类)的成员之一,当用户查看“英雄榜”菜单项时,该对画框可见,提供了查看扫雷的最好成绩的界面。ShowRecord 类的主要成员变量、方法: 成员变量1)File 存放文件的引用。2)用户单击“显示成绩”
20、按钮,可以查看各个级别扫雷的最好成绩。3)用户单击“重新记分”按钮,可以将“英雄榜”中的成绩恢复为初始值。 方法1)actionPerformed(ActionEvent)方法是 ShowRecord 类实现的ActionListener 接口中的方法,当用户单击“显示成绩”按钮后,该方法被执行,所执行的操作就是调用 readAndShow( )方法。2)readAndShow( )方法负责读取存放在文件中的各个级别的扫雷最好成绩以及扫雷者姓名,并显示这些先关信息。95 运行结果分析扫雷游戏主界面的运行效果如图 51 所示:图 51 游戏主界面通过 MineGame 创建的窗口可以选择游戏的级
21、别,例如选择初级,选择后的窗口界面如图 52 所示: 图 52 初级游戏界10MineArea 创建的扫雷区域效果如图 53 和图 54 所示。其中图 53 为扫雷进行中的效果,图 54 为扫雷失败效果:图 53 扫雷进行效果图11图 54 扫雷失败效果图ShowRecord 创建的对象负责提供显示成绩的界面,效果如图 55 所示:图 55 成绩结果图126 设计体会通过这次的课程设计,我对 Java 这门语言有了更深刻的理解。其中包括类、对象、接口、继承、方法以及 Java 语言中的常用包等的使用方法,特别是图形用户界面里各种组件的创建,事件处理等相关知识。使我对 Java 语言是一种非常难
22、懂的语言的思想有了极大的改观。我认为 Java 语 言 是 一 门 很 基 础 的 语 言 , 所有的计算机语言都是相通的,只要一门学会了,其他语言就会很容易学会。我之前对 c 语 言 的 基 础 掌 握 的 并 不是很好,所以导致我在学习 JAVA 的 时 候 有 些 吃 力 , 通 过 Java 的学习也使我翻回去重新学习和巩固了 c 语言的相关知识,使我的基础更加的扎实。虽然学会了 Java 语 言 的 大 部 分 基 础 知 识 , 但要掌握好 Java 并 不 是 一 件 简 单 的 事情。仅仅把基础知识掌握牢固是不够的,主演是对程序编制的理解,思考如何利用 Java语言的所有基础知
23、识来实现编制程序的作用,以及如何更加简便的实现等等。这就需要很强的逻辑思维,和长时间的经验积累,以及自身不断的钻研等诸多因素的有机统一。总之,通过 Java 语言的学习,使我对计算机语言有了更加深入的认识和理解。知道了许多 Java 语 言 与 其 他 语 言 的 区 别 和 特 性 , 及其在我们生活中所发挥的重要作用。这次的课程设计是用 Java 语言及相关知识设计一个扫雷游戏系统,能实现选择游戏级别,记录游戏时间和保存游戏成绩等功能。虽然整个设计的时间才短短两周,我还是对 JDK 和 JCreator 等 Java 语言开发工具有了深层次的认知,并熟练掌握了它们的使用方法。而且这次的课程
24、设计,也使我的编程能力有了明显的提高。通过这次课程设计设计,我才明白学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。此外,我认为这次课程设计最大的收获就是:知识必须通过应用才能实现其价值!有些东13西以为学会了,但真正到用的时候才发现是两回事,所以我认为只有到真正会用的时候才是真的学会了。 14参考文献1 朱福喜,尹为民,余振坤. Java语言与面向对象程序设计M.武汉:武汉大学出版社,1999.2 陈国君,陈磊.Java 2 从入门到精通M.北京:清华大学出社,2006.3 王梅.Java 并发编程设计原则与模式M.北京:中国电力出版社,2009.4 尹伟民.Java 程序设计之网络编程M.北京:清华大学出版社,2008.5 印昊.java 与面向对象程序设计M.北京:高等教育出版社,2008.6 耿祥义.Java 课程设计M.北京:清华大学出版社,2009.