目 录
1、绪论 11
1.1背景以及现状 11
1.2 Java语言的特点 12
1.3 系统运行环境及开发软件: 12
1.4 可行性的分析 13
1.4.1 技术可行性 13
1.4.2 经济可行性 13
1.4.3 操作可行性 14
2、 需求分析 14
2.1 用户需求分析 14
2.2功能需求分析 15
2.3界面设计需求分析 15
3、 系统概要设计 16
3.1系统模块设计 16
3.1.1窗体类 16
3.1.2初始化类 17
3.1.3背景类 18
3.1.4马里奥类 18
3.1.5障碍物类 19
3.1.6敌人类 19
3.2系统流程设计 20
4、 系统详细设计 21
4.1 设计目标 21
4.2 系统模块设计 22
4.2.1窗体类 22
4.2.2初始化类 26
4.2.3背景类 28
4.2.4马里奥类 31
4.2.5障碍物类 37
4.2.6敌人类 39
5、系统的实现 42
5.1游戏开发所需要的图片 42
5.1.1马里奥的所有图片 42
5.1.2游戏中障碍物的图片 43
5.1.3游戏中怪物的图片 44
5.1.4游戏中的背景图片 44
5.1.5游戏开始时的图片 45
5.2游戏设计的界面 45
5.2.1 游戏逻辑展示 45
5.2.1 游戏逻辑展示 46
6、系统测试 48
6.1 测试的意义 48
6.2 测试过程 49
6.3 测试结果 49
7、总结与展望 50
7.1 总结 50
7.2 设计中的不足之处 51
7.3 展望 51
致 谢 52
外文原文 53
外文翻译 57
2、需求分析
所谓系统分析,就是指在整个系统开发工程中,解决“做什么”的问题,把要解决哪些问题,满足用户哪些具体的信息需求调查分析清楚,从逻辑上或是说从信息处理的功能需求上提出系统的方案,即逻辑模型,为下一阶段进行物理方案设计,解决怎么办提供依据。
2.1 用户需求分析
超级玛丽这款游戏是很多人童年经典的回忆,是一种简单的大众的游戏,自从计算机实现以来,深受广大电脑玩家的喜爱。并且随着社会的快速发展,人们的生活节奏越来越快,人们对于童年的美好已经不愿意仅仅停留在回忆阶段。所以利用java语言开发一款超级玛丽游戏正是人们迫切需要的。
2.2功能需求分析
本系统主要是完成超级玛丽游戏的基本操作。本系统需要满足以下几点要求:
(1) 在开始界面按空格键进入游戏。
(2) 利用方向键来控制马里奥的运动。
(3) 碰撞检测:
A.马里奥在运动的过程中如果碰到障碍物则停止运动,在移动到悬崖上方是会掉下去,并失去一条生命。
B.对于有些敌人,如果马里奥跳到敌人头顶上,则敌人消失,否则马里奥失去一条生命。
(4)马里奥顶到金币会增加分数,当马里奥失去3条生命时游戏结束。
2.3界面设计需求分析
- 选取和谐Q版的图片,使画面色彩和谐自然。
- 固定游戏界面大小与初始显示位置。
- 游戏采用900600像素显示,对于马里奥和障碍物选用6060像素的正
方图片,对于较大的障碍物分割成多个60*60的小正方形。
4、系统详细设计
4.1 设计目标
本软件是针对超级玛丽小游戏的JAVA程序,进入游戏后首先按空格键开始,利用方向键来控制的马里奥的移动,同时检测马里奥与场景中的障碍物和敌人的碰撞,并判断马里奥的可移动性和马里奥的生命值。当马里奥通过最后一个场景后游戏结束。
4.2 系统模块设计
本系统共包括6各类:
4.2.1窗体类
该类主要用于存放游戏的场景以及其他各类,并且实现KeyListener接口,用于从键盘的按键中读取信息。该类中的一些属性主要包括了用于存放所有场景的list集合 allBG,马里奥类 mario,当前的场景 nowBG以及其他一些游戏中需要的标记等。而且在该类中,运用双缓存的技术使得游戏的流畅度更高,解决了游戏中出现的闪屏问题。
将该类的名字定义为MyFrame,并且要在该类中实现KeyListener接口和Runnable接口。然后首先要在该类中定义一个List集合,集合的泛型为背景类BackGround,集合的名字定义为allBG,用于存放所有的背景。接着定义一个Mario类属性,名字为mario,这个就是游戏运行时候的所需要的mario。接下来还要在类中定义一个BackGround属性,nowBG,默认值应当为空,会在构造方法中赋予该属性初值,这个属性主要是用来存放当前游戏运行时马里奥所处的游戏场景。另外该类中还应该有一个Thread类属性t,这个属性主要是为了在游戏运行的时候控制游戏的线程。然后就可以在类中定义main()方法,将该类实现就可以了。值得一提的是该类的构造方法相对来说是比较复杂的。
在该类的构造方法中,应当首先绘制窗体类的标题,以及窗体类的大小,并且要对窗体类在初始化的时候的位置,也就是在屏幕中显示的位置,最好是显示的时候居中,这样的话在游戏运行时会比较美观一些。其次还要对窗体的一个是否可拉升属性进行一下设置,这个设置的主要目的是因为游戏的界面都是开发者经过深思熟虑考虑出来的比较美观的界面,玩家随意改变游戏的窗口大小可能会对游戏的体验造成影响,所以在这里应该设置游戏的窗体默认不可以被拉伸。
public MyFrame(){this.setTitle("玛丽奥");this.setSize(900, 600);//这里是为了获得电脑屏幕的整体大小,以便于下面确定窗体的位置int width = Toolkit.getDefaultToolkit().getScreenSize().width;int height = Toolkit.getDefaultToolkit().getScreenSize().height;this.setLocation((width-900)/2, (height-600)/2);//设置窗体默认不可以被拉伸this.setResizable(false);//初始化图片StaticValue.init();