关于雷电游戏的软件工程设计报告
- 格式:pdf
- 大小:583.81 KB
- 文档页数:36
基于JAVA的雷电游戏的设计与实现摘要雷电是电脑游戏发展史中早期最为经典的游戏之一,经常能在掌上游戏机、手机以及电脑上见到这个游戏。
本游戏是一个基于java的雷电游戏,利用Eclipse平台实现经典的雷电游戏。
本课题针对JAVA开发进行初步的研究,并设计一款飞行射击类小游戏。
本文在对游戏进行详细需求分析的基础上,确定了游戏的功能和性能要求,对游戏的菜单界面、屏幕绘制、布局算法、关卡进行了设计,并最终实现了一个界面友好、高效稳定和富有娱乐性的雷电小游戏。
让人们在紧张的工作或学习之余能够方便地放松心情。
本论文首先介绍了游戏开发的背景;随后介绍了Eclipse平台,对Eclipse开发平台的特征、构成及其系统架构进行了简单系统的描述;然后对本游戏进行了策划,并对游戏的各项需求做了简要分析;接着,详细说明了游戏的设计和实现的过程,包括游戏界面的展示等;最后一部分对开发好的游戏进行了测试,达到了预期目的。
关键词: 雷电;射击游戏;java;Eclipse平台Design and Implementation of lighting Games based on JavaAbstractLightning is the history of the development of computer games in the early one of the most classic game, often on a handheld game consoles, mobile phone and computer to see this game. This game is a game based on the realization of Java lightning, Lightning classic game based on Eclipse platform.This paper makes a study of the JAVA system architecture and application development , and design a flight shooting game. Based on the detailed requirement analysis of the gameit determined the functional and performance requirements of the game, the game menu interfa ce, drawing on the screen, the layout algorithm, level set, finally it realized a lighting game which has friend interface, high efficiency and is stable and entertaining. Allow people to be able to relax in the study or work tensions over.This paper firstly introduces the background of the development about the game; then in troduces the Eclipse platform, has carried on the simple description of the system characterist ics; then planning on the game, and briefly analyzed the demand for the game; then detailed d escription of the game design and implementation process, including the game framework, th e use of game development class and game interface display; the last part of the development of good games are tested, to achieve the expected goal.Keywords: lightning; shooting game; Java; Eclipse platform目录摘要 (i)Abstract (ii)1 前言 (1)1.1 项目背景 (1)1.2 国内外研究现状 (1)1.3 项目设计目的 (2)1.4 项目设计要求 (2)1.5 项目设计目标 (2)1.6 本文组织结构 (2)2 开发平台及技术 (3)2.1 Eclipse (3)2.2 Java (3)2.3 java技术在游戏开发中的应用 (4)2.4 JDK (6)2.5 Photoshop (7)3 可行性分析 (8)3.1 技术可行性 (8)3.2 经济可行性 (8)3.3 社会可行性 (9)3.4 总体设计原则 (9)4 需求分析 (10)4.1 游戏策划 (10)4.2 用户需求分析 (10)4.2.1 美工需求 (10)4.2.2 功能需求 (10)4.2.3 游戏主界面功能需求 (10)5 概要设计 (12)5.1 功能模块设计 (12)5.1.1 游戏功能图 (12)5.1.2 游戏模块图 (12)5.1.3 游戏状态控制功能 (12)5.2 功能分析 (13)5.2.1 功能分析图 (13)5.2.2 功能需求定义 (13)5.3 功能需求与用户的关系 (15)5.4 游戏素材 (15)5.5 游戏难点分析 (16)6 详细设计与实现 (17)6.1 游戏首页的实现 (17)6.1.1 界面实现 (17)6.1.2 流程图 (17)6.1.3 核心代码 (18)6.2 游戏开始模块的实现 (19)6.2.1 界面实现 (19)6.2.2 流程图 (20)6.2.3 核心代码 (21)6.3 遇到boss的模块 (23)6.3.1 界面实现 (23)6.3.2 流程图 (24)6.3.3 核心代码 (25)6.4 与游戏相关的JAVA类 (26)7 系统测试与性能 (27)7.1 软件测试 (27)7.1.1 测试简介 (27)7.1.2 测试的目的 (27)7.1.3 测试的重要性 (27)7.2 测试分类 (28)7.3 测试步骤 (28)7.4 游戏系统测试 (29)7.4.1 测试环境 (29)7.4.2 对程序单个模块进行测试 (29)7.5 游戏性能分析 (29)7.6 测试结果 (29)总结和展望 (31)参考文献 (32)致谢 (33)外文原文 (34)中文翻译 (39)1 前言1.1 项目背景现代科学技术的发展,尤其是手机技术的发展,改变了人们的生活,作为一名新世纪的大学生,应该站在时代发展的前沿,掌握现代的科学技术知识,以适应社会的发展需要。
西安文理学院信息工程学院课程设计报告设计名称:数据结构课程设计设计题目:实现一个N*M的扫雷游戏学生学号:1402130407专业班级:软件13级四班学生姓名:樊秀琳学生成绩:指导教师(职称):谢巧玲(讲师)课题工作时间:2015.6.22 至2015.7.3说明:1、报告中的任务书、进度表由指导教师在课程设计开始前填写并发给每个学生。
2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩。
3、所有学生必须参加课程设计的答辩环节,凡不参加答辩者,其成绩一律按不及格处理。
答辩由指导教师实施。
4、报告正文字数一般应不少于3000字,也可由指导教师根据本门综合设计的情况另行规定。
5、平时表现成绩低于6分的学生,取消答辩资格,其本项综合设计成绩按不及格处理。
信息工程学院课程设计任务书指导教师:院长:日期:2015年6月22日信息工程学院课程设计进度安排表学生姓名:樊秀琳学号:1402130407 专业:软件工程班级:13级四班指导教师签名:2014年6月22日成绩评定表学生姓名:樊秀琳学号:1402130407 专业:软件工程班级:13级四班摘要摘要:扫雷游戏是Windows操作系统自带的一款小游戏,在过去的几年里,Windows操作系统历经数次换代更新,变得越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。
扫雷游戏是比较经典的一款小游戏,实现它的方法很多,可以用很多不同算法设计和语言实现,如C,C++,VB,JAVA等。
我利用eclipse编写了与它功能相似的扫雷游戏,寓学于乐。
程序的功能是随机生成地雷数,通过鼠标操作玩游戏,不接受键盘,按任意键结束程序。
单击屏幕上的笑脸可以重新开始游戏。
所有地雷标出后胜利,当鼠标左键单击到地雷时提示游戏失败。
其功能类似于Windows操作系统自带的扫雷游戏。
论文首先介绍了进行该游戏课程设计的目的,然后是任务描述和设计的相关要求,最后是最重要的需求分析和设计方案。
西安文理学院信息工程学院课程设计报告设计名称:数据结构课程设计设计题目:实现一个N*M的扫雷游戏学生学号: 07专业班级:软件13级四班学生姓名:樊秀琳学生成绩:指导教师(职称):谢巧玲(讲师)课题工作时间:至说明:1、报告中的任务书、进度表由指导教师在课程设计开始前填写并发给每个学生。
2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩。
3、所有学生必须参加课程设计的答辩环节,凡不参加答辩者,其成绩一律按不及格处理。
答辩由指导教师实施。
4、报告正文字数一般应不少于3000字,也可由指导教师根据本门综合设计的情况另行规定。
5、平时表现成绩低于6分的学生,取消答辩资格,其本项综合设计成绩按不及格处理。
信息工程学院课程设计任务书指导教师:院长:日期:2015年6月22日信息工程学院课程设计进度安排表学生姓名:樊秀琳学号: 07 专业:软件工程班级: 13级四班指导教师签名:2014年6月22日成绩评定表学生姓名:樊秀琳学号: 07 专业:软件工程班级: 13级四班摘要?摘??要?:扫雷游戏是Windows操作系统自带的一款小游戏,在过去的几年里,Windows操作系统历经数次换代更新,变得越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。
扫雷游戏是比较经典的一款小游戏,实现它的方法很多,可以用很多不同算法设计和语言实现,如C,C++,VB,JAVA等。
我利用eclipse编写了与它功能相似的扫雷游戏,寓学于乐。
程序的功能是随机生成地雷数,通过鼠标操作玩游戏,不接受键盘,按任意键结束程序。
单击屏幕上的笑脸可以重新开始游戏。
所有地雷标出后胜利,当鼠标左键单击到地雷时提示游戏失败。
其功能类似于Windows操作系统自带的扫雷游戏。
论文首先介绍了进行该游戏课程设计的目的,然后是任务描述和设计的相关要求,最后是最重要的需求分析和设计方案。
重点介绍了在游戏过程中各事件的处理,其中又以鼠标事件和清除未靠近地雷区方块这两方面最为最要,鼠标事件是利用鼠标所发出的信息了解用户的意图,进而做出相对应的动作。
摘要此次设计的一款扫雷游戏,其功能类似于Windows操作系统自带的扫雷游戏。
首先介绍了制作游戏的整体思路及整个游戏设计的流程规划,然后介绍了雷区的布置及地雷随机产生的实现方法;重点介绍了在游戏过程中各事件的处理,其中又以鼠标事件和清除未靠近地雷区方块这两方面最为重要,鼠标事件是利用鼠标所发出的信息了解使用者的意图,进而做出相对应的动作,而清除未靠近地雷区方块由于引进了“递归”这个概念而使其简单化。
本次设计只是完成了扫雷游戏的基本功能,在细节方面仍有待完善。
关键词:扫雷、事件、递归1引言 (1)1.1课题背景 (1)1.2本文的主要工作 (1)2 需求分析及开发环境 (1)2.1系统目标 (1)2.2系统应具备的基本功能 (1)2.3开发环境及工具 (2)3系统总体设计 (2)3.1基本简介 (2)3.2功能模块设计 (3)4 系统流程与实现 (5)4.1系统流程 (5)4.2游戏界面介绍 (6)总结 (9)参考文献 (9)1.1课题背景扫雷是一个相对来说较为简单的小游戏。
而且由于自身能力有限的问题,所以对于首次尝试制作小游戏的我是一个比较不错的选题。
由于从未制作过任何的软件,为了将自己的所学知识加以运用,制作过程很大上的程度借鉴了别人的思想。
但是我希望通过此次制作和学习过程,可以了解软件设计的方法。
1.2本文的主要工作本文主要工作时相对较为详细的阐述此个小游戏,也就是扫雷的制作过程,遇到的问题,还有解决办法。
所采用的工具软件和使用的方法。
2 需求分析及开发环境2.1系统目标游戏开始时,系统会在雷区的某些小方块中随机布下若干个地雷。
安放好地雷的小方块称之为雷方块,其他的称之为非雷方块。
部署完毕后,系统会在其他非雷方块中填充一些数字。
某一个具体数字表示与其紧邻的8个方块中有多少雷方块。
玩家可以根据这些信息去判断是否可以打开某些方块,并把认为是地雷的方块打上标识。
如果某个数字方块周围的地雷全都标记完,可以指向该方块并同时点击鼠标左右键,将其周围剩下的方块挖开。
扫雷游戏毕业设计开题报告(二)引言概述:扫雷游戏是一种经典的计算机游戏,其规则简单但又富有挑战性。
开展扫雷游戏的毕业设计项目,除了能够提升自身编程技术外,还可以加深对算法和逻辑的理解。
本文将以扫雷游戏毕业设计开题报告的第二部分,继续探讨游戏设计的细节,包括难度级别设定、游戏界面设计、游戏操作方式、计时功能和游戏结束条件。
正文:1. 难度级别设定:a. 设定游戏难度级别,例如初级、中级、高级,以便玩家根据自身实力选择适合的难度。
b. 每个难度级别中,设定雷区的大小和雷的数量,确保游戏的可玩性和挑战性。
c. 根据难度级别设定雷的布置方式,例如随机布雷或者按照特定模式布雷等。
2. 游戏界面设计:a. 设计游戏主界面,包括雷区、计时器、剩余雷数等元素的布局。
b. 使用合适的颜色和图标设计界面,使其具有良好的视觉效果和用户体验。
c. 提供可调节界面大小的功能,以适应不同屏幕和设备。
3. 游戏操作方式:a. 设计鼠标和键盘输入的操作方式,使玩家能够方便地进行游戏。
b. 实现双击操作,方便玩家快速揭示周围方块。
c. 提供右键标记功能,以帮助玩家确定雷的位置。
4. 计时功能:a. 设计游戏开始时启动计时功能,并在游戏进行过程中实时显示所用时间。
b. 提供计时暂停和重置功能,以便玩家能够按需控制计时。
c. 记录每位玩家的最佳成绩和完成时间,以便与其他玩家比较。
5. 游戏结束条件:a. 当玩家点击雷区时,游戏结束,显示失败信息。
b. 当玩家成功标记了所有雷并揭示了所有非雷方块,游戏结束,显示胜利信息。
c. 提供重新开始游戏的选项,以便玩家能够进行下一轮游戏。
总结:扫雷游戏的毕业设计项目涉及难度级别设定、游戏界面设计、游戏操作方式、计时功能和游戏结束条件等多个方面。
通过合理设计和实现这些要点,能够提供一个具有挑战性和趣味性的扫雷游戏,满足玩家的需求,并进一步提升自身的编程技术和算法逻辑能力。
电气信息学院实训报告课程名称: 软件项目实训实训题目: 扫雷游戏年级/专业/班: ***************** 学生姓名: **** 学号: ********** 实训成绩:指导教师签名:年月日摘要游戏业发展一日千里,该行业极大的影响和改变了人们的生活和娱乐方式,游戏为消费者提供丰富多彩的虚拟空间,使消费者可以自由自在的享受虚拟世界的乐趣,实现自己在现实生活着那个可能永远不能实现的梦想,满足了消费者的心理和精神需求。
扫雷游戏是Windows操作系统自带的一个小游戏,过去的几年里Windows操作系统历经数次换代,变得越来越庞大、复杂,但这个可爱的小游戏在任何版本的Windows操作系统里去却依然保持着原貌。
但几乎每个电脑使用者都接触过它,并且深爱着这款小游戏。
扫雷游戏是比较经典的一款小游戏,实现它的方法很多,可以用很多不同算法和语言实现,如C,C++,VB,JA V A等。
本论文研究的是以Visual C++ 6.0为开发环境,设计并开发一款扫雷游戏,其功能类似于Windows操作系统自带的扫雷游戏。
论文首先介绍了制作游戏的整体思路及整个游戏设计的流程规划,然后介绍了雷区的布置及地雷随机产生的实现方法;重点介绍了在游戏过程中各事件的处理,其中又以鼠标事件和清除未靠近地雷区方块这两方面最为最要,鼠标事件是利用鼠标所发出的信息了解使用者的意图,进而做出相对应的动作,而清除未靠近地雷区方块由于引进了“递归”这个概念而使其简单化。
关键字:扫雷;Visual C++ 6.0;事件;递归IAbstractGame industry develops by leaps and bounds,and it has a great impact on the way people live and entertainment, games provide consumers with a variety of virtual space, so that consumers can enjoy the free fun of the virtual world, achieve the dream that may never achieve in real life, and satisfy the psychological and spiritual needs consumer.The Sweep Mine Game is a small game that the Windows operating system have. Over the past few years the Windows operating system has experienced a number of chang,and become much larger and more complexed. However, this lovely game in any version of the Windows operating system has keep the original appearance. Almost every computer users have come into contact with it, and love this game.The Sweep Mine Game is an classical little game, and there are many ways can achieve it,we can use many different algorithms and languages,such as C,C++,VB,JA V A and so on.This study is based on Visual C++ 6.0 to designed and made the sweep mine game,it’s function is similar to the game that the Windows operating system has. First we introduced the whole idea of making the game and the process planning of the game design,then introduced the method of the layout of minefields and mines randomly generated. And focuses on the process of dealing with the incident in the game, among them, the mouse events and clearance of unexploded landmines around the box are the two most important thing, the mouse events is to use the message that the mouse give to understand the the user's intent, then make the corresponding action, and clearance of unexploded landmines around the box has became simply with the introduction of the "recursive" .Key words:Sweep Mine,; Visual C++ 6.0; Affairs,; RecursionⅡ目录摘要........................................................................I Abstract.. (Ⅱ)1 引言 (1)1.1 系统概述 (1)1.2 需求分析 (1)1.3 运行环境 (1)2 概要设计 (2)2.1 设计思路 (2)2.2 模块功能介绍 (2)2.3 模块结构图 (3)2.4 程序流程图 (3)2.5 功能设计分工 (4)3 详细设计 (4)3.1 游戏菜单的实现 (4)3.2 游戏帮助对话框的实现 (8)3.3 游戏英雄榜对话框的实现 (10)3.4 游戏播放背景音乐的实现 (15)3.5 新游戏处理模块的设计与实现 (15)3.6 地雷格子模块的设计与实现 (18)3.7 游戏规则模块的设计与实现 (22)3.8 游戏绘图模块的设计与实现 (25)3.9 玩家输入模块的设计与实现 (28)4 调试分析 (32)5 测试 (32)5.1 主菜单和界面显示功能的测试演示 (32)5.2 鼠标输入功能的测试演示 (33)5.3 标示指定格子功能的测试演示 (33)5.4 游戏胜负判断功能的测试演示 (34)5.5 游戏帮助功能的测试演示 (34)心得与体会 (35)参考文献 (37)1 引言1.1 系统概述扫雷游戏,是Windows操作系统自带的一款经典游戏。
北京青年政治学院小学期达内JA V A课程项目报告项目题目:雷电游戏的设计与实现专业班级:学生姓名:学生学号:指导教师姓名:目录一、系统目标 (X)二、系统设计思路 (X)三、系统详细设计 (X)四、系统实现 (X)五、系统设计总结 .......................................................................... X X六、参考文献 .................................................................................. X X1一、系统目标通过本游戏的设计,综合自己在校期间所学的理论知识,设计开发雷电游戏,使自己熟应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,初步掌握软件工程的系统理论,进一步巩固和加强自身对J2SE基础知识的理解,提高自己的编程水平,从而达到理论与实践相结合的目的。
通过本游戏的开发,主要实现游戏的可操作性及美观性,同时使自己对JAVA语言的了解更进一层,为将来的实际工作打下坚实的基础。
二、系统设计思路1、定义窗口的属性2、分别设置背景图片,英雄飞机图片,敌机图片,子弹图片,爆炸的图片3、分别设置敌机和英雄飞机的运动轨迹4、写出判断敌机是否与英雄飞机相撞,子弹是否击中敌机的代码5、设置一些丰富游戏的细致属性,例:绘制积分情况和血量图,子弹发射的频率等三、系统详细设计1、定义窗口属性(1)创建一个窗体对象(2)设置窗体的标题(3)设置窗体的大小(4)关闭窗口时退出程序(5)设置窗体在屏幕当中显示的位置(6)设置窗体的显示2注:游戏面板应做到1、继承JPanel 2、实现相应的接口线程和鼠标监听事件2、定义并设置游戏中的主要元素(1)定义一个英雄飞机并对其属性进行设置(2)定义一个存放英雄机子弹的集合(3)定义存储敌机的数组,敌机初始化值为10并将其放入到数组当中(4)创建一个生成随机数的Random对象(5)定义一个存放爆炸图片的集合(6)设置敌机的属性,并将创建好的敌机添加到数组当中(7)绘制图片。
Java应用技术实训报告一.总体设计本系统共包括3个java源文件和4个图像文件1.类之间的关系如图1.1所示图1.1类之的关系2 . java源文件及其功能如表1所示3.图像文件Bomb.gif :地雷方块上的图标。
questio n.gif :疑惑探雷是否正确。
bomb_big.gif :触雷时方块上的图标。
flag.gif :探雷标记。
、详细设计1 .主类Main(1 )成员变量(见表2)表2成员变量描述变量类型备注游戏运行Mai nBomb 临时变量(2)成员变量(见表3)表3名称功能备注mai n 游戏开始(3)源代码见文件Ma in .javaimport java.awt.*;import java.awt.eve nt.*;import javax.swi ng.*;/*主类*/public class Mai n{public static void main(String args[]) {(new Main Bomb()).show();}}2 .挖雷游戏MainBomb(1 )成员变量(见表4)(2)方法见(表5)(3)源代码见文件MainBomb.javaimport java.awt.*;import java.awt.eve nt.*;import javax.swi ng.*;/*窗口及算法实现类*/class Mai nBomb exte ndsJFrame impleme nts Actio nListe ner,MouseListe nerpublic JTextField text;public Label nowBomb,setBomb;public int BlockNum,BombNum;// 当前方块数当前雷数public Icon icon_bomb = new ImageIcon("Bomb.gif");// 踩雷public Icon icon_bomb_big = new ImageIcon("bomb_big.gif"); // 踩雷标记public Icon icon_flag = new ImageIcon("flag.gif");// 雷标记public Icon icon_question = new ImageIcon("question.gif"); // 疑惑是否有雷public JButton start = new JButton(" 开始");public Panel MenuPamel = new Panel();public Panel mainPanel = new Panel();public Bomb[][] bombButton;/* 界面设计*/public MainBomb(){super(" 成型04-2 李超JAVA 课程设计");BlockNum = 64;BombNum = 10;Container c=getContentPane();c.setBackground(Color.gray);c.setLayout(new BorderLayout());text=new JTextField("10 ",3);nowBomb = new Label(" 当前雷数"+" "+BombNum+"");setBomb= new Label(" 设置地雷数");start.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){BombNum = Integer.parseInt(text.getText().trim());if(BombNum >= 10 && BombNum < 50 )replay();else{JOptionPane msg = new JOptionPane();JOptionPane.showMessageDialog(null," 您设置的地雷数太多了设!"," 错误, 请重",2);}}} );MenuPamel.add(setBomb);MenuPamel.add(text);MenuPamel.add(start);MenuPamel.add(nowBomb);c.add(MenuPamel,"North");mainPanel.setLayout(new GridLayout( (int)Math.sqrt(BlockNum)(int)Math.sqrt(BlockNum)) );bombButton=new Bomb[ (int)Math.sqrt(BlockNum) ][];for(int i = 0 ; i < (int)Math.sqrt(BlockNum) ; i++) {bombButton[ i ]=new Bomb[ (int)Math.sqrt(BlockNum) ];}for(int i = 0 ; i < (int)Math.sqrt(BlockNum) ; i++ ) for(int j = 0 ; j < (int)Math.sqrt(BlockNum) ; j++ ) {bombButton[ i ][ j ]=new Bomb(i,j);bombButton[ i ][ j ].setForeground( Color.gray);bombButton[ i ][ j ].addActionListener(this);bombButton[ i ][ j ].addMouseListener(this);}for(int i = 0 ; i < (int)Math.sqrt(BlockNum) ; i++ )for(int j = 0 ; j < (int)Math.sqrt(BlockNum) ; j++ ) mainPanel.add(bombButton[ i ][ j ]);c.add(mainPanel,"Center");startBomb();setSize(400,400);setLocation(350,200);setResizable(false);}/* 布雷*/public void startBomb()for(int i=0;i<BombNum;i++){int x =(int)(Math.random()*(int)(Math.sqrt(BlockNum)-1));int y =(int)(Math.random()*(int)(Math.sqrt(BlockNum)-1));if(bombButton[ x ][ y ].isBomb==true)i--;elsebombButton[ x ][ y ].isBomb=true ;}}/* 重新开始*/public void replay(){nowBomb.setText(" 当前雷数"+" "+BombNum+"");for(int i = 0 ; i < (int)Math.sqrt(BlockNum) ; i++)for(int j = 0 ; j < (int)Math.sqrt(BlockNum) ; j++){bombButton[ i ][ j ].isBomb=false;bombButton[ i ][ j ].isClicked=false;bombButton[ i ][ j ].setEnabled(true);bombButton[ i ][ j ].setText("");bombButton[ i ][ j ].setIcon(null);}startBomb();}/* 是否挖完了所有的雷*/public void isWin(){int findBomb=0; // 找到的地雷数for(int i=0;i< (int)Math.sqrt(BlockNum); i++)for(int j=0;j< (int)Math.sqrt(BlockNum ); j++){if(bombButton[ i ][ j ].isBomb == true && bombButton[ i ][ j ].isRight== true)findBomb++;}if( findBomb == Integer.parseInt(text.getText().trim()) ){JOptionPane msg = new JOptionPane();JOptionPane.showMessageDialog(this," 您挖完了所有的雷,您胜利了您胜利了",2);}}/* 计算方块周围雷数*/public void CountRoundBomb(){for (int i=0; i< (int)Math.sqrt(BlockNum); i++){for (int j = 0; j < (int)Math.sqrt(BlockNum); j++){int count = 0;// 当需要检测的单元格本身无地雷的情况下,统计周围的地雷个数if (bombButton[ i ][ j ].isBomb != true) {if ( (i - 1 >= 0) && (j - 1 >= 0)) {if (bombButton[i - 1][j - 1].isBomb == true) {count += 1; // 检测左上方空格是否是地雷}}if ( (i - 1 >= 0)) {if (bombButton[i - 1][ j ].isBomb == true) {count += 1; // 检测上方空格是否为地雷}}if ( (i - 1 >= 0) && (j + 1 <= (int)Math.sqrt(BlockNum)-1)) { if (bombButton[i - 1][j + 1] .isBomb == true) {count += 1; // 检测右上方是否为地雷}}if ( (j - 1 >= 0)) {if (bombButton[ i ][j - 1] .isBomb == true) {count += 1; // 检测左边是否为地雷if ( (i >= 0) && (j + 1 <= (int)Math.sqrt(BlockNum)-1)) {if (bombButton[ i ][j + 1].isBomb == true) {count += 1; // 右边}}if ( (j - 1 >= 0) && (i + 1 <= (int)Math.sqrt(BlockNum)-1)) { if (bombButton[i + 1][j - 1].isBomb == true) {count += 1; // 左下}}if ( (i + 1 <= (int)Math.sqrt(BlockNum)-1)) {if (bombButton[i + 1][ j ].isBomb == true) {count += 1; // 下}}if ( (j + 1 <= (int)Math.sqrt(BlockNum)-1) && (i + 1 <= Math.sqrt(BlockNum)-1)) {if (bombButton[i + 1][j + 1].isBomb == true) {count += 1; // 右下}}bombButton[ i ][ j ].BombRoundCount = count;}/** 当选中的位置为空, 则翻开周围的地图**/public void isNull(Bomb[][] bombButton,Bomb ClickecButton){int i,j;i=ClickecButton.num_x;j=ClickecButton.num_y;if (ClickecButton.isBomb==true) {}else {if ( (i - 1 >= 0) && (j - 1 >= 0)) { // 检测左上方空格是否是空if (bombButton[i - 1][j - 1].isBomb == false && bombButton[i - 1][j -1].isClicked == false && bombButton[i - 1][j - 1].isRight == false) {bombButton[i-1][j-1].setText((bombButton[i-1][j-1].BombRoundCount)+"");bombButton[i - 1][j - 1].setEnabled(false);bombButton[i - 1][j - 1].isClicked=true;}}if ( (i - 1 >= 0)) { // 检测上方空格是否为空if (bombButton[i-1][ j].isBomb == false && bombButton[i1][ j ].isClicked == false && bombButton[i - 1][ j ].isRight == false){bombButton[i-1][ j].setText((bombButton[i-1][ j ].BombRoundCount)+"");bombButton[i - 1][ j ].setEnabled(false);bombButton[i - 1][ j ].isClicked=true;if ( (i - 1 >= 0) && (j + 1 <= ((int)Math.sqrt(BlockNum)-1)) ) { // 检测右上方是否为空if (bombButton[i - 1][j + 1] .isBomb == false && bombButton[i - 1][j +1].isClicked == false && bombButton[i - 1][j + 1].isRight == false){bombButton[i - 1][j + 1].setText((bombButton[i - 1][j + 1].BombRoundCount)+"");bombButton[i - 1][j + 1].setEnabled(false);bombButton[i - 1][j + 1].isClicked=true;}}if ( (j - 1 >= 0)) { // 检测左边是否为空if (bombButton[ i ][j - 1].isBomb == false && bombButton[ i ][j - 1].isClicked == false && bombButton[ i ][j - 1].isRight == false) {bombButton[ i ][j - 1].setText((bombButton[ i ][j -1].BombRoundCount)+"");bombButton[ i ][j - 1].setEnabled(false);bombButton[ i ][j - 1].isClicked=true;}}if ( (i >= 0) && (j + 1 <= ((int)Math.sqrt(BlockNum)-1)) ) { // 检测右边空格是否是空if (bombButton[ i ][j + 1].isBomb == false && bombButton[ i ][j +1].isClicked == false && bombButton[ i ][j + 1].isRight == false) {bombButton[ i ][j + 1].setText((bombButton[ i ][j +1].BombRoundCount)+"");bombButton[ i ][j + 1].setEnabled(false);bombButton[ i ][j + 1].isClicked=true;}if ( (j - 1 >= 0) && (i + 1 <= ((int)Math.sqrt(BlockNum)-1)) ) { // 检测左下空格是否是空if (bombButton[i + 1][j - 1].isBomb == false && bombButton[i + 1][j -1].isClicked == false && bombButton[i + 1][j - 1].isRight == false) {bombButton[i + 1][j - 1].setText((bombButton[i + 1][j - 1].BombRoundCount)+"");bombButton[i + 1][j - 1].setEnabled(false);bombButton[i + 1][j - 1].isClicked=true;}}if ( (i + 1 <= ((int)Math.sqrt(BlockNum)-1)) ) { // 检测下边空格是否是空if (bombButton[i + 1][ j ].isBomb == false && bombButton[i + 1][ j ].isClicked == false && bombButton[i + 1][ j ].isRight == false) {bombButton[i + 1][ j ].setText((bombButton[i + 1][ j ].BombRoundCount)+"");bombButton[i + 1][ j ].setEnabled(false);bombButton[i + 1][ j ].isClicked=true;}}if ( (j + 1 <= ((int)Math.sqrt(BlockNum)-1) ) && (i + 1 <=((int)Math.sqrt(BlockNum)-1)) ) { // 检测右下边空格是否是空if (bombButton[i + 1][j + 1].isBomb == false && bombButton[i + 1][j +1].isClicked == false && bombButton[i + 1][j + 1].isRight == false){bombButton[i+1][j+1].setText((bombButton[i+1][j+1].BombRoundCo unt)+"");bombButton[i + 1][j + 1].setEnabled(false); bombButton[i + 1][j +1].isClicked=true;}}if ( (i - 1 >= 0) && (j - 1 >= 0))// 检测左上isNull(bombButton,bombButton[i - 1][j - 1]);if ( (i - 1 >= 0))isNull( bombButton,bombButton[i - 1][ j ]);// 检测上方if ( (i - 1 >= 0) && (j + 1 <= (int)Math.sqrt(BlockNum)-1))isNull( bombButton,bombButton[i - 1][j + 1]);// 检测右上if ( (j - 1 >= 0))isNull(bombButton,bombButton[i][j - 1]);// 检测左边if ( (i >= 0) && (j + 1 <= ((int)Math.sqrt(BlockNum)-1)) )isNull(bombButton,bombButton[i][j + 1]);// 检测右边if ( (j - 1 >= 0) && (i + 1 <= ((int)Math.sqrt(BlockNum)-1)) )isNull(bombButton,bombButton[i + 1][j - 1]); // 检测左下if ( (i + 1 <= ((int)Math.sqrt(BlockNum)-1)) ) // 检测下isNull(bombButton,bombButton[i + 1][ j ]);if ( (j + 1 <= ((int)Math.sqrt(BlockNum)-1)) && (i +1 <= ((int)Math.sqrt(BlockNum)-1)) )// 检测右下isNull(bombButton,bombButton[i + 1][j + 1]);}}public void actionPerformed(ActionEvent e){CountRoundBomb();if(((Bomb)e.getSource()).isBomb==false&&((Bomb)e.getSource()).isClicked==false){((Bomb)e.getSource()).setText(( ((Bomb)e.getSource()).BombRoundCount) +"");((Bomb)e.getSource()).isClicked=true;((Bomb)e.getSource()).setIcon(null);((Bomb)e.getSource()).setEnabled(false);if((((Bomb)e.getSource()).BombRoundCount) == 0)isNull(bombButton,(Bomb)e.getSource());isWin();}else if(((Bomb)e.getSource()).isBomb == true){for(int i=0;i<(int)Math.sqrt(BlockNum);i++)for(int j=0;j<(int)Math.sqrt(BlockNum);j++){if(bombButton[ i ][ j ].isBomb == true)bombButton[ i ][ j ].setIcon(icon_bomb);}((Bomb)e.getSource()).setIcon(icon_bomb_big);JOptionPane msg = new JOptionPane();JOptionPane.showMessageDialog(this," 你踩到地雷了,按确定重来"," 你踩到地雷了",2);replay();}}public void mouseClicked(MouseEvent e){Bomb bombSource = (Bomb)e.getSource();boolean right = SwingUtilities.isRightMouseButton(e);if((right == true) && (bombSource.isClicked == false)){bombSource.BombFlag = (bombSource.BombFlag + 1)%3;if(bombSource.BombFlag == 1){if(BombNum > 0 && bombSource.isRight == false ){bombSource.setIcon(icon_flag);bombSource.isRight = true;BombNum--;}isWin();nowBomb.setText(" 当前雷数"+" "+BombNum+"");}else if(bombSource.BombFlag == 2){if( (BombNum!=0 ) &&(bombSource.getIcon()==icon_flag)) )||(BombNum==0 BombNum++;bombSource.setIcon(icon_question);nowBomb.setText(" 当前雷数"+" "+BombNum+"");}else if(bombSource.BombFlag == 0)bombSource.setlc on(n ull); bombSource.isRight = false;}}}public void mouseE ntered(MouseEve nt e){}public void mouseReleased(MouseEve nt e){}public void mouseExited(MouseEve nt e){}public void mousePressed(MouseEve nt e){}}3 .按钮Bomb(1 )成员变量(见表6)(2)源代码见文件Bomb.java import java.awt.*;import java.awt.eve nt.*;import javax.swing.*; /* 按扭类 */class Bomb extends JButton{public int num_x,num_y; public int BombRoundCount; public boolean isBomb; public boolean isClicked; public int BombFlag;public boolean isRight; public Bomb(int x,int y) { BombFlag = 0; num_x = x;num_y = y; BombRoundCount = 0; isBomb = false; isClicked = false; isRight = false;}}三.运行效果点击开始运行游戏,即可点选方格、根据方格数字推断雷的位置。
北京青年政治学院小学期达内JA V A课程项目报告项目题目:雷电游戏的设计与实现专业班级:学生姓名:学生学号:指导教师姓名:目录一、系统目标 (X)二、系统设计思路 (X)三、系统详细设计 (X)四、系统实现 (X)五、系统设计总结 (XX)六、参考文献 (XX)一、系统目标通过本游戏的设计,综合自己在校期间所学的理论知识,设计开发雷电游戏,使自己熟应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,初步掌握软件工程的系统理论,进一步巩固和加强自身对J2SE基础知识的理解,提高自己的编程水平,从而达到理论与实践相结合的目的。
通过本游戏的开发,主要实现游戏的可操作性及美观性,同时使自己对JAVA语言的了解更进一层,为将来的实际工作打下坚实的基础。
二、系统设计思路1、定义窗口的属性2、分别设置背景图片,英雄飞机图片,敌机图片,子弹图片,爆炸的图片3、分别设置敌机和英雄飞机的运动轨迹4、写出判断敌机是否与英雄飞机相撞,子弹是否击中敌机的代码5、设置一些丰富游戏的细致属性,例:绘制积分情况和血量图,子弹发射的频率等三、系统详细设计1、定义窗口属性(1)创建一个窗体对象(2)设置窗体的标题(3)设置窗体的大小(4)关闭窗口时退出程序(5)设置窗体在屏幕当中显示的位置(6)设置窗体的显示注:游戏面板应做到1、继承JPanel 2、实现相应的接口线程和鼠标监听事件2、定义并设置游戏中的主要元素(1)定义一个英雄飞机并对其属性进行设置(2)定义一个存放英雄机子弹的集合(3)定义存储敌机的数组,敌机初始化值为10并将其放入到数组当中(4)创建一个生成随机数的Random对象(5)定义一个存放爆炸图片的集合(6)设置敌机的属性,并将创建好的敌机添加到数组当中(7)绘制图片。
分别绘制英雄机的子弹,英雄飞机,敌机,爆炸图片(8)对子弹的设置。
将创建的子弹添加到存放子弹的集合当中,控制子弹的发射频率,让子弹飞,得到集合中的每一个子弹,当鼠标的某一个键按下时,发射子弹,英雄机子弹自动移动等。
关于雷电游戏的软件工程设计报告一、简介雷电游戏是一款经典的射击游戏,由于其简单易懂、玩法丰富、难度可控等优点,一直深受玩家们的喜爱。
本文将对雷电游戏进行软件工程设计,并分享设计思路和具体实现过程,以便对软件工程师们有所启示和参考。
二、需求分析1.游戏玩法设计游戏主要分为三个难度等级,难度等级越高则敌人出现的次数会越多,并且敌人速度会越来越快。
用户可以通过改变玩家飞机的位置和使用大招进行攻击敌人。
2.用户界面设计界面应该简洁明了,让玩家轻松上手。
包括游戏首页、游戏界面、暂停界面和结束界面等四个功能性页面。
3.游戏音效设计应该包括玩家飞机的射击音效、敌机爆炸音效和背景音乐等。
4.游戏存储设计游戏进度需要进行保存,因此需要设计存储方案。
游戏中需要保存的数据包括游戏等级、分数和玩家飞机的属性等。
三、概要设计1.游戏结构设计游戏应该按照MVC 模式进行设计:Model 层负责数据存储,View 层负责用户界面展示,Controller 层负责控制游戏流程。
2.游戏逻辑设计游戏应该包括游戏初始化、游戏循环、敌机制造、敌机移动、敌机死亡、玩家飞机移动、玩家飞机死亡、子弹发射、子弹移动、子弹死亡等模块,以实现游戏的基本功能。
3.用户界面设计首页应该包括游戏开始和退出按钮,游戏界面应该包括玩家飞机、敌机、分数和暂停按钮,暂停界面应该包括继续和退出按钮,结束界面应该包括重新开始和退出按钮。
4.数据结构设计玩家飞机、敌机、子弹等游戏元素应该以结构体形式保存,并在Model 层进行状态存储。
四、详细设计1.模块设计(1)GameLoop游戏循环模块负责控制游戏的主要逻辑,判断游戏是否结束以及敌机的复活等。
(2)PlayerPlane玩家飞机模块负责控制玩家的飞机的移动和攻击。
(3)EnemyPlane敌机模块负责控制敌机的生成和移动。
(4)Bullet子弹模块负责控制子弹的发射和移动。
(5)DataStorage数据存储模块负责游戏的进度保存和读取。