版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、原工学院信息商务学院课程设计报告课程游戏开发课程设计课 程 设 计 名 称扫雷游戏学 生 姓 名*学号*专业班级指导教师 TOC o 1-5 h z 第一章设计内容及要求1.扫雷游戏的基本要求1. HYPERLINK l bookmark5 o Current Document 游戏需要实现的主要功能1.第二章需求分析 2. .扫雷游戏界面设计2. HYPERLINK l bookmark10 o Current Document 雷区的设计 2. . HYPERLINK l bookmark12 o Current Document 音效的设计 3. . HYPERLINK l bookma
2、rk14 o Current Document 扫雷英雄榜的设计 3. HYPERLINK l bookmark18 o Current Document 第三章总体设计 5. . HYPERLINK l bookmark16 o Current Document 总体功能图 5. . HYPERLINK l bookmark22 o Current Document 总体流程图 5. .第四章主要功能设计流程 6.雷区设计流程图6.音效设计流程图6. HYPERLINK l bookmark26 o Current Document 英雄榜设计流程图 7.第五章主要功能设计流程8. HYPE
3、RLINK l bookmark28 o Current Document 类之间关系图 8. HYPERLINK l bookmark32 o Current Document 程序运行效果图 8.游戏登录界面 8.游戏菜单界面 9.游戏运行界面1.0游戏英雄榜界面1.2 HYPERLINK l bookmark38 o Current Document 第六章总结 1.3. HYPERLINK l bookmark40 o Current Document 参考文献1.4.附录 1.5. 第一章设计内容及要求扫雷游戏的基本要求当前各种游戏层出不穷,因为游戏的开发成本非常大,所以游戏的开发具
4、有一定的风险性,但是一些小游戏的开发成本具有成本小,编写简单的优势,所以这些小游戏在游戏开发中也占有一席之地。在这类小游戏中包括益智类游戏,它以画面精美、游戏方法简单等特点得到大家的认可。成为人们在工作之余不可或缺的好伙伴。针对这种情况我选择了扫雷游戏该课题作为我的课程题目。Windows XP 和 Windows 7系统提供的扫雷游戏是一个很有趣的游戏。本次课程设计的主要任务是使用JAVA 语言编写一个与其类似的扫雷游戏。具体要求如下:1、扫雷游戏分为初级、中级和高级三个级别,同时扫雷英雄榜存储每个级别的最好成绩,即挖出全部的地雷且用时最少者。单击游戏菜单可以选择 “初级” 、“中级”和“高
5、级”或“查看英雄版”。2、选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键单击雷区中任何一个方块便启动了计时器。3、用户要揭开某个方块,可单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下没有雷,则显示一个数字,该数字代表此方块周围的8 个方块中共有多少颗雷。4、如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记( 无论用户的标记是否正确) ,窗口左上角的雷数计数器将会减少一个。5、扫雷胜利后(用时最少者),程序弹出保存成绩的对话框。6、用户如果遇到疑问的方块,可以勾选游戏菜单下的标记选项卡(或者用快捷键 A
6、lt+G 然后点击M )即可标记该可疑方块,此时双击右键并可出现“?”标记。另有颜色选项,当用户选中该项时,游戏将以最低图像像素来显示。如果用户需要使用提示声,可选中声音选项,此时将听到计时的咔嗒声。当用户点中雷时,将有爆炸声产生;胜利时,将有凯旋的旋律播放,此时企鹅出现欢悦表情。游戏需要实现的主要功能1、用户可以自定义级别并且可以任意输入雷数;2、具有计时功能,既显示用户完成所有扫雷任务所需要的时间;3、自动保存扫雷英雄榜。第二章需求分析扫雷游戏界面设计系统的整体布局为:CardLayout布局,采用了菜单、按钮、面板等组件,菜单主要包括开始、选择级别、标记、扫雷英雄榜、退出等选项。雷区的设
7、计MineArea 类是 java.swing 包中Jpanel容器的子类,实现了ActionListener 和MouseListener 接口,所创建的对象:mineArea是 MineGame类中最重要的成员之一,作为一个容器添加到MineGame 窗口的中心。其中MineArea 类的主要成员变量、方法以及和MineGame类之间组合关系的UML 图如图 2-1 所示。MineArearow,colum,mineCount,markMount: in block: BlockblockView: BlockViewshowTime: JTextFieldshouMarkedMineCo
8、unt: JTextFieldlay: LayMines record: Record reStart: JButton time: TimerMineArearow,colum,mineCount,markMount: in block: BlockblockView: BlockViewshowTime: JTextFieldshouMarkedMineCount: JTextFieldlay: LayMines record: Record reStart: JButton time: TimerinitMineArea(int,int,int): void actionnPerform
9、ed(ActionEvent) void mousePressed(MouseEvent): voidshow(int m,int n): void inquireWin(): voidJPanelActionListenerMouseListener2-1 MineArea 类的 UML 图MineGame mineArea: MineArea以下是 UML 图中有关数据和方法的详细说明。1、成员变量(1)block 是 Block 类型的数组,用来确定雷区有多少需进行扫雷的方块。(2)blockView 是 BlockView 类型的数组,负责为 block 数组中的Block 对象提供视
10、图。(3)lay是 LayMines类型的对象,负责设置block 数组中的哪些方块是雷或不是雷。(4)record 负责提供保存成绩的界面,是一个对话框,默认不可见。用户只有扫雷成功后(用时最少),才可以看见对话框。(5)reStart是一个按钮对象,用户单击它重新开始游戏。(6)time 是计时器对象,负责计算用户的用时。2、方法(1)initMineArea(int,int,int,int)方法可根据参数提供的数据设置雷区的宽度、高度、雷的数目以及雷区的级别。(2)actionPerformed(ActionEvent) 是 MineArea 类实现的ActionListener接 口
11、中 的 方 法 。 当 用 户 单 击 blockView 中 的 某 个 方 块 时 , actionPerformed(ActionEvent) 方法负责执行有关算法,例如, 当用鼠标左键单击方块上的按钮后,若该方块下有雷,actionPerformed(ActionEvent) 方法将使用户输掉本局,若该方块下无雷,actionPerformed(ActionEvent) 方法将显示blockView 对象中的标签,该标签上是一个数字,该数字代表当前方块的周围的个方块中共有多少颗雷。(3)show() 方法是一个递归方法。actionPerformed(ActionEvent) 方法执行
12、时将调用show方法进行扫雷。(4)mousePressed(MouseEvent) 方法是 MineArea 类实现的MouseListener 接口中的方法,当用户按下鼠标有件事mousePressed(MouseEvent)方法负责让方块上显示一个探雷标记。(5)inquireWin() 方法用来判断用户是否扫雷成功,如果成功该方法负责让record 对话框可见。所谓扫雷成功是指不仅找到了全部的累而且用时最少。音效的设计music 类是 java.awt 包中 Frame 的子类,通过构造音效声音方法,在MainFrame主类中,通过 ActionListener 来监视是否已开始游戏,
13、来决定播放计时声,之后又通过ActionListener 来监视是否踩到雷和是否完成来决定,播放相应的音乐。下面标明music 类的主要成员变量、方法以及和MineFrame类之间组合关系的UML图如图2-2 所示。musiclooping,looping2,looping3:booleanfile1,file2,file3:Filesound1,sound2,sound3:AudioClipchosenClip1,chosenClip2,chosenClip3:AudioClipdidaInit():void didaLoop():void didaStop():void detonatio
14、nInit():voiddetonationPlay():void victoryInit():void victoryPlay():void2-2 MineArea 类的 UML 图扫雷英雄榜的设计LogDialog 是 javax.swing 包 中 Jdialog 对 话 框 的 子 类 , 并 实 现 了ActiongListener 接口。 LogDialog 创建的对象dialog 是 MainFrame类(主类)的成员之一,当用户选择查看“英雄榜”菜单项时,该对话框可见,提供了查看扫雷的最好成绩的界面。标明LogDialog 类的主要成员变量、方法以及和MainFrame类之间组
15、合关系的UML图如图2-3 所示。2-3 LogDialog 类的 UML 图3.1 总体功能图游 戏 菜 单第三章总体设计级 别 选 择关 于 扫 雷3-1 总体功能图3.2 总体流程图钮,菜单等定义并初始化个按菜单菜单按钮重新开始展示相应的效果方 块3-2 总体流程图4.1 雷区设计流程图4.2 音效设计流程图第四章主要功能设计流程处理周围信息, 并显示相应效果开始4-1 雷区设计流程图4.3 英雄榜设计流程图4-2 音效设计流程图读取游戏级别以及记录更新原始记录并且保存4-3 排行榜设计流程图5.1 类之间关系图第五章运行结果5-1 类之间关系图5.2 程序运行效果图游戏登录界面5-2
16、初级扫雷界面图5-3 初级扫雷界面图5-4 高级扫雷界面图5.2.2 游戏菜单界面5-5 游戏菜单界面5.2.3 游戏运行界面5-6 游戏自定义雷区界面5-7 游戏运行主界面5-8 游戏失败界面图 5-9 游戏胜利界面5.2.4 游戏英雄榜界面5-10 游戏英雄榜界面第六章总结此次课程设计的题目为扫雷游戏,通过课程设计,进一步巩固、加深我们所学专业课程JAVA语言教程的基本理论知识,理论联系实际,进一步培养我们的综合分析问题,解决问题的能力;全面考核我们所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的;利用所学知识,开发小型应用系统,掌握运用JAVA语言编写调试应用系统程序
17、,训练独立开发应用系统,进行数据处理的综合能力;对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型;熟练掌握JAVA语言的GUI 设计、线程技术,灵活运用各种类库, 为今后从事实际工作打下坚实的基础。通过该课程设计,全面系统的理解了 JAVA 语言的一般原理和基本实现方法。把死板的课本知识变得生动有趣,激发了学习的积极性。把学过的JAVA的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。通过这次课程设计使我懂得了理论与实践相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正掌握这门技术,也提
18、高了自己的独立思考的能力。在设计的过程遇到问题,可以说得上是困难重重,这毕竟第一次做的,难免会遇到各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻, 掌握得不够牢固,通过这次课程设计之后,一定把以前所学的知识重新温故。参考文献吕凤羽、马皓JAVA 程序设计清华大学出版社耿祥义 JAVA 课程设计清华大学出版黄小东 Java课程设计案例精编中国水利水电出版社印旻 Java与面向对象程序设计清华大学出版社游戏登陆界面部分源代码public class LogDialog extends JDialog implements ActionListener pr
19、ivate LevelLog levelLog;private JTextArea logArea;private JButton resetButton;private JButton confirmButton;public LogDialog(JFrame frame, LevelLog log) super(frame, 扫雷英雄榜, true);getContentPane().set Layout(null);levelLog = log;logArea = new JTextArea();logArea.setEditable(false);logArea.setBackgrou
20、nd(UIManager.getColor(CheckBox.background);logArea.setBounds(10,10,160,60);getContentPane().add(logArea, null);resetButton = new JButton( 重新计分);resetButton.setBounds(10,70,90,25);resetButton.addActionListener(this);getContentPane().add(resetButton, null);setTextArea();confirmButton = new JButton( 确定
21、 );confirmButton.setBounds(105,70,60,25);confirmButton.addActionListener(this);getContentPane().add(confirmButton, null);setSize(180,140);setLocationRelativeTo(frame);setResizable(false);show();private void setTextArea() logArea.setText( 初级: + levelLog0.toString()+ 中级: + levelLog1.toString()+ 高级: +
22、levelLog2.toString();public void actionPerformed(ActionEvent e) if(e.getSource()=resetButton) for(int i=0;i=0;i-) g.drawImage(numberImagedg/divi,(bound-i)*dWidth,0,this);dg %= divi; return image; public void init() segmentPolygon = new Polygon7;numberImage = new Image10;/setup polygonssetNumberPolyg
23、on();setNumberImage();public void setBackGround(Color bgc) bgColor = bgc; public void setFontColor(Color fc) fontColor = fc; public void setMaskColor(Color mkc) maskColor = mkc; public void setDigitWidth(int w) dWidth = w;init(); public void setDigitHeight(int h) dHeight = h;init(); public void setD
24、igitSize(int w, int h) dWidth = w;dHeight = h;init(); private void setNumberImage() int i = 0;int j = 0;int k;Graphics g;while(i10) numberImagei = new BufferedImage(15,20,BufferedImage.TYPE_INT_RGB);g = numberImagei.getGraphics();g.setColor(bgColor);g.fillRect(0,0,15,20);g.setColor(Color.DARK_GRAY);
25、j = 0;while(jnumberSegment8.length) k = numberSegment8j;g.fillPolygon(segmentPolygonk);j+;g.setColor(fontColor);j = 0;while(jnumberSegmenti.length) k = numberSegmentij;g.fillPolygon(segmentPolygonk);j+; i+; public void setNumberPolygon() int mid = dHeight/2+1;segmentPolygon0 = new Polygon();segmentP
26、olygon0.addPoint(2, 1);segmentPolygon0.addPoint(dWidth-2,1);segmentPolygon0.addPoint(dWidth-5,4);segmentPolygon0.addPoint(4,4);segmentPolygon1 = new Polygon();segmentPolygon1.addPoint(dWidth-1, 1);segmentPolygon1.addPoint(dWidth-1, mid-1);segmentPolygon1.addPoint(dWidth-2, mid-1);segmentPolygon1.add
27、Point(dWidth-4, mid-3);segmentPolygon1.addPoint(dWidth-4, 4);segmentPolygon2 = new Polygon();segmentPolygon2.addPoint(dWidth-1, mid);segmentPolygon2.addPoint(dWidth-1, dHeight-2);segmentPolygon2.addPoint(dWidth-4, dHeight-5);segmentPolygon2.addPoint(dWidth-4, mid+1);segmentPolygon2.addPoint(dWidth-3
28、, mid);segmentPolygon3 = new Polygon();segmentPolygon3.addPoint(dWidth-2, dHeight-1);segmentPolygon3.addPoint(1, dHeight-1);segmentPolygon3.addPoint(4, dHeight-4);segmentPolygon3.addPoint(dWidth-4, dHeight-4);segmentPolygon4 = new Polygon();segmentPolygon4.addPoint(1, dHeight-2);segmentPolygon4.addP
29、oint(1, mid);segmentPolygon4.addPoint(3, mid);segmentPolygon4.addPoint(4, mid+1);segmentPolygon4.addPoint(4, dHeight-5);segmentPolygon5 = new Polygon();segmentPolygon5.addPoint(1, mid-1);segmentPolygon5.addPoint(1, 1);segmentPolygon5.addPoint(4, 4);segmentPolygon5.addPoint(4, mid-3);segmentPolygon5.
30、addPoint(2, mid-1);segmentPolygon6 = new Polygon();segmentPolygon6.addPoint(3, mid-1);segmentPolygon6.addPoint(4, mid-2);segmentPolygon6.addPoint(dWidth-4, mid-2);segmentPolygon6.addPoint(dWidth-3, mid-1);segmentPolygon6.addPoint(dWidth-5, mid+1);segmentPolygon6.addPoint(4, mid+1);自定义扫雷界面代码public cl
31、ass CustomDialog extends JDialog implements ActionListener private JTextField widthField;private JTextField heightField;private JTextField mineField;private JButton confirmButton;private JButton cancelButton;private static LevelInfo level;public CustomDialog(Frame frame, LevelInfo levelInfo) super(f
32、rame, 自定义雷区,true);getContentPane().set Layout(null);JLabel tempLabel = new JLabel( 高度 :);tempLabel.setBounds(10,10,30,20);heightField = new JTextField(+levelInfo.getXBound();heightField.setBounds(50,10,40,20);getContentPane().add(tempLabel,null);getContentPane().add(heightField,null);tempLabel = new
33、 JLabel( 宽度 :);tempLabel.setBounds(10,40,30,20);widthField = new JTextField(+levelInfo.getYBound();widthField.setBounds(50,40,40,20);getContentPane().add(tempLabel,null);getContentPane().add(widthField,null);tempLabel = new JLabel( 雷数 :);tempLabel.setBounds(10,70,30,20);mineField = new JTextField(+l
34、evelInfo.getMineCount();mineField.setBounds(50,70,40,20);getContentPane().add(tempLabel,null);getContentPane().add(mineField,null);confirmButton = new JButton( 确定 );confirmButton.addActionListener(this);confirmButton.setBounds(100,10,60,25);getContentPane().add(confirmButton,null);cancelButton = new
35、 JButton( 取消 );cancelButton.addActionListener(this);cancelButton.setBounds(100,45,60,25);getContentPane().add(cancelButton,null);setSize(180,137);setLocationRelativeTo(frame);setResizable(false);show();public void actionPerformed(ActionEvent e) level = null;if(e.getSource()=confirmButton) int x = Integer.parseInt(heightField.getText();int y = Integer.parseInt(widthField.getText();int m = Integer.parseInt(mineField.getText();level = new LevelInfo(x,y,m);dispose();public static LevelInfo getUserLevel(JFrame frame, LevelInfo levelInfo) CustomDialog dialog
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子温度计数电课程设计
- 2024人事代理合同(标准版)
- 电子时钟单片机课程设计
- 电子抢答器课程设计
- 禁止在商铺内给电动车充电合同(2篇)
- 电子商务 课程设计
- 电子信息类全套课程设计
- 电子仪器课程设计
- 电大本科毕业课程设计
- 电基础综合课程设计
- 吸收放散实验课件
- 3.1《让小车运动起来》优质课件
- 新形势下,如何做好一人一事思想政治工作
- 《基于核心素养高中物理实验教学实施素质教育的研究》结题总结报告
- 行政人事部工作分析表
- 英语漫谈胶东海洋文化知到章节答案智慧树2023年威海海洋职业学院
- 航空母舰优秀课件
- 2023年芒果TV春季校园招聘笔试参考题库附带答案详解
- 共享中国知到章节答案智慧树2023年上海工程技术大学
- 中国十大传世名画课件
- 2023新人教版八年级上册英语单词表默写版(可打印)
评论
0/150
提交评论