超级玛丽--Java课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《面向对象程序设计》
课程设计报告
题目:超级玛丽软件的设计与实现
院(系):信息科学与工程学院
专业班级:计算机科学与技术1201班
学生姓名:程伟
学号: 20121183011
指导教师:吴奕
20 14 年 12 月 29 日至20 15 年 1 月 9 日
华中科技大学武昌分校制
面向对象程序设计课程设计任务书
目录
1需求与总体设计 (4)
1.1需求分析 (4)
1.2程序功能图 (4)
1.3程序类图 (5)
2详细设计 (6)
2.1 MyFrame实现 (6)
2.1.1窗体对象的序列图 (6)
2.1.2 Myframe详细类图 (7)
2.2 Mario实现 (7)
2.2.1 Mario对象的序列图 (7)
2.2.2 Mario类图 (8)
2.3 Enemy类的实现 (9)
2.4 Obstruction类的实现 (10)
2.5 BackGround类实现 (10)
3编码实现 (11)
4系统测试 (61)
4.1 游戏开始界面的测试 (61)
4.2 游戏运行的测试 (61)
4.3 排除错误的处理 (64)
总结 (65)
1需求与总体设计
1.1需求分析
提供一个友好的用户交互界面,简单明了容易操作。并且游戏有一定的难度和娱乐性。开发一个Mario类。一个场景类,以及敌人类,障碍物类。让超级玛丽能够在场景中完成各种动作。并且有场景的切换等等功能。游戏中设计了一些很有意思的陷阱,玩家一步小心掉入陷阱,超级玛丽就会死亡。这样会给人意想不到的惊奇,达到娱乐大众,增加游戏难度的效果。游戏的设计匠心独具,并且都经过了各种测试,除了为玩家增加一些意想不到的游戏陷阱以外,还必须保证玩家能够通关。
1.2程序功能图
如图1所示:
图1
1.3程序类图
系统的整体类图的框架如图2所示。首先是窗体类。他需要调用到Mario和BackGround类中的方法。以便动态的显示Mario类和BackGround。而BackGround里面又包含了Enemy和Obstruction。Enemy,Obstruction和Mario类又调用静态类StaticValue的方法,用以显示真实的图片。而StaticValue则是一个静态类,将存储在硬盘的图片资源加载进入内存以便其他模块调用。
图2
2详细设计
2.1MyFrame实现
2.1.1窗体对象的序列图
窗体对象继承了JFrame类并且实现了Runnable接口。作为窗体对象,它首先显示窗体,绘制背景。然后启动线程。在run方法里面动态得绘制窗体中需要显示的Mario 的图片,障碍物的图片,敌人的图片。该窗体的run方法是一个死循环,每次执行一个循环调用sleep方法睡眠50毫秒。序列图如图3所示。
图3
2.1.2 Myframe详细类图
private Mario mario;//Mario对象
private boolean isStart = false;//标识游戏是否已经开始
this.paintAllEnemys(g2);//绘制所有的敌人
this.paintAllObstruction(g2);//绘制所有障碍物
2.2 Mario实现
2.2.1 Mario对象的序列图
因为需要有一个专门的线程来实时监测Mario的移动状况,和障碍物和敌人的碰撞情况。所以让Mario类继承了Runnable接口。Mario先启动线程。该线程的run方法也是一个死循环。首先根据Mario的状态changeMarioImage方法修改Mario的显示图片。再根据Mario的determinexy方法决定Mario的移动。然后通过deterMarioWithObstruction方法检测Mario和障碍物之间的碰撞,在根据marioTouchEnemys方法检测Mario和敌人之间的碰撞。然后调用sleep()方法让线程休息5毫秒。如此结束一个循环。序列图如图4所示。
图4 2.2.2 Mario类图
类图中:
private int x;//Mario的x坐标
private int y;//Mario的y坐标
private int life;//Mario的生命BackGround bg = null;//Mario所在的背景
private int uptime;//Mario的上升时间
String status;//Mario的移动状态
int score;//Mario的分数
Thread t;//Mario的线程
int xmove;//Mario的x移动距离
int ymove;//Mario的y移动距离
private boolean isClear = false;//标识用户是否通关。isClear为true时代表用户通关了
2.3 Enemy类的实现
private int x;//敌人的x坐标
private int y;//敌人的y坐标
private int startX;//敌人的初始x坐标
private int startY;//敌人的初始y坐标
private boolean startIsLeftOrUp;//敌人初始的移动方向
private int startImageType;//初始的显示图片
private int type;//敌人的类型1代表蘑菇,2代表食人花,3代表乌龟
private BufferedImage bufferedImage;
private BackGround bg;//障碍物所在的背景
private int imageType;//移动的极限范围
详细类图如下: