当前位置:文档之家› 超级玛丽详细设计文档

超级玛丽详细设计文档

超级玛丽详细设计文档超级玛丽JA V A小游戏详细设计目录1.导言 ............................................................................................ 错误!未定义书签。

1.1编写目的 .................................................................... 错误!未定义书签。

1.2项目范围 .................................................................... 错误!未定义书签。

1.3参考资料 .................................................................... 错误!未定义书签。

1.4缩写说明 .................................................................... 错误!未定义书签。

1.5术语定义 .................................................................... 错误!未定义书签。

2.功能需求 .................................................................................... 错误!未定义书签。

2.1界面设计技术............................................................ 错误!未定义书签。

2.2游戏功能划分............................................................ 错误!未定义书签。

2.3功能划分的架构图.................................................... 错误!未定义书签。

2.4具体的功能模块........................................................ 错误!未定义书签。

2.5功能描述 .................................................................... 错误!未定义书签。

2.6程序的总体架构........................................................ 错误!未定义书签。

2.7程序的三层结构图 (6)3.面向对象设计 (7)3.1主要类图 (7)3.2各个模块的方法或类名类表示 (8)3.3地图绘制中的坐标说明 (8)4.程序的详细设计 (9)4.1主要人物玛丽的实现 (9)4.2核心类 (9)◆分离。

◆业务逻辑层。

主要是游戏的人物和敌人的动作,碰撞的判断,这个与表现层无关,需要表示层调用定义好的接口与逻辑层的通信◆数据持久层。

保存游戏中的数据,载入游戏中需要的资源,与程序逻辑层无关,用XML文档存储数据2.7程序的三层结构图表现层(绘制屏逻辑层(程序的数据持久层(数3.面向对象设计3.1主要类图3.2各个模块的方法或类名类表示3.3地图绘制中的坐标说明4.程序的详细设计部分源代码如下:4.1主要人物玛丽的实现package org.liky.mario;import java.awt.image.BufferedImage;public class Mario implements Runnable {//坐标private int x;private int y;//定义一个场景对象来保存mario当前所处的场景对象private BackGround bg;//加入线程private Thread t=null;//移动速度private int xmove=0;private int ymove=0;//状态private String status;//显示的图片private BufferedImage showImage;//生命数和分数private int life;private int score;//当前移动中显示的图片数private int moving=0;private int upTime=0;//标记mario是否死亡private boolean isDead=false;//标记玩家是否完成了全部的游戏private boolean isClear=false;public Mario(int x,int y){this.x=x;this.y=y;//初始化Mario图片this.showImage=StaticValue.allMarioImage.get(0);this.score=0;this.life=3;t=new Thread(this);this.status="right--standing";t.start();}public void leftMove(){//改变速度this.xmove=-30;//改变状态//如果当前已经是跳跃状态,应该保留原有状态,不应该改变状态if(this.status.indexOf("jumping")!=-1){this.status="left--jumping";}else{this.status="left--moving";}}public void rightMove(){this.xmove=30;//如果当前已经是跳跃状态,应该保留原有状态,不应该改变状态if(this.status.indexOf("jumping")!=-1){this.status="right--jumping";}else{this.status="right--moving";}}public void leftStop(){this.xmove=0;//如果当前已经是跳跃状态,应该保留原有状态,不应该改变状态if(this.status.indexOf("jumping")!=-1){this.status="left--jumping";}else{this.status="left--standing";}}public void rightStop(){this.xmove=0;//如果当前已经是跳跃状态,应该保留原有状态,不应该改变状态if(this.status.indexOf("jumping")!=-1){this.status="right--jumping";}else{this.status="right--standing";}}public void jump(){if(this.status.indexOf("jumping")==-1){if(this.status.indexOf("left")!=-1){this.status="left--jumping";}else{this.status="right--jumping";}ymove=-30;upTime=6;}}public void down(){if(this.status.indexOf("left")!=-1){this.status="left--jumping";}else{this.status="right--jumping";}ymove=30;}//mario的死亡方法public void dead(){this.life--;if(this.life==0){this.showImage=StaticValue.mariodeadImage;this.isDead=true;}else{this.bg.reset();this.x=0;this.y=480;}}public int getX() {return x;}public int getY() {return y;}public void setX(int x) {this.x = x;}public void setY(int y) {this.y = y;}public BufferedImage getShowImage() {return showImage;}public void run() {// TODO Auto-generated method stubwhile(true){if(this.bg.isFlag()&&this.x>=508){//如果为最后一个场景,同时mario的坐标到达了508,则游戏结束//自动控制游戏结束的移动this.bg.setOver(true);if(this.bg.isDown()){//降旗后,mario开始向城门移动this.status="right--moving";if(this.x<568){//mario只向右移动this.x+=30;}else{if(this.y<480){//mario向下移动this.y+=30;}this.x+=30;if(this.x>762){//游戏结束,已经完成了全部的场景this.isClear=true;}}}else{if(this.y<420){this.y+=30;}if(this.y>=420){this.y=420;this.status="right--standing";}}}else{//判断当前mario是否与障碍物碰撞//定义标记boolean canLeft=true;boolean canRight=true;//定义一个mario当前是否处于障碍物上的标记boolean onLand=false;for(int i=0;i<this.bg.getAllObstruction().size();i++){Obstruction ob=this.bg.getAllObstruction().get(i);//如果mario和障碍物相切则不允许mario继续向右移动if((ob.getX()==this.x+60)&&(ob.getY()+50>this.y&&ob.getY()-50<this.y)){if(ob.getType()!=3){canRight=false;}}//不允许mario继续向左移动if((ob.getX()==this.x-60)&&(ob.getY()+50>this.y&&ob.getY()-50<this.y)){if(ob.getType()!=3){canLeft=false;}}//如果符合条件则表明mario当前处在障碍物上面if(ob.getY()==this.y+60&&(ob.getX()+60>this.x&&ob.getX()-60<this.x)){if(ob.getType()!=3){onLand=true;}}//判断当前mario在跳跃过程中是否顶到了障碍物if(upTime>0){if(ob.getY()==this.y-60&&(ob.getX()+50>this.x&&ob.getX()-50<this. x)){//对于砖块处理if(ob.getType()==0){//将该砖块从场景中移除this.bg.getAllObstruction().remove(ob);//将被移除的砖块保存到一个集合中this.bg.getRemovedObstruction().add(ob);//将分数加10this.score+=10;}//对于问号的处理和对于隐藏的砖块的处理if(ob.getType()==4||ob.getType()==3){ob.setType(2);ob.setImage();this.score+=50;}upTime=0;}}}//加入mario对敌人的判断for(int i=0;i<this.bg.getAllEnemy().size();i++){Enemy e=this.bg.getAllEnemy().get(i);if((e.getX()+50>this.x)&&(e.getX()-50<this.x)&&(e.getY()+60>this. y&&e.getY()-60<this.y)){//mario死亡this.dead();}if(e.getY()==this.y+60&&(e.getX()+50>this.x&&e.getX()-50<this.x)) {if(e.getType()==1||e.getType()==3){e.dead();this.upTime=2;this.ymove=-30;this.score+=50;}else if(e.getType()==2){this.dead();}}}if(onLand && upTime==0){if(this.status.indexOf("left")!=-1){if(xmove==0){this.status="left--standing";}else{this.status="left--moving";}}else{if(xmove==0){this.status="right--standing";}else{this.status="right--moving";}}}else{//表示当前为上升状态if(upTime!=0){upTime--;}else{this.down();}y+=ymove;}if(this.y>600){this.dead();}if(canLeft==true && xmove<0 || (canRight==true && xmove>0)){//改变坐标x+=xmove;if(x<0){x=0;}}}//定义一个图片取得的初始索引值int temp=0;//判断mario是否面向左if(this.status.indexOf("left")!=-1){temp+=5;}//判断mario是否移动if(this.status.indexOf("moving")!=-1){temp+=this.moving;moving++;}if(moving==4){moving=0;}if(this.status.indexOf("jumping")!=-1){temp+=4;}//改变显示图片this.showImage=StaticValue.allMarioImage.get(temp);try{Thread.sleep(100);}catch(InterruptedException e){e.printStackTrace();}if(this.score==500){this.life++;this.score=0;}}}public void setBg(BackGround bg) {this.bg = bg;}public boolean isDead() {return isDead;}public int getLife() {return life;}public void setLife(int life) {this.life = life;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}public boolean isClear() {return isClear;}}。

相关主题