超级玛丽详细设计文档

超级玛丽详细设计文档
超级玛丽详细设计文档

超级玛丽详细设计文档

超级玛丽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 stub

while(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

Obstruction ob=this.bg.getAllObstruction().get(i);

//如果mario和障碍物相切则不允许mario继续向右移动

if((ob.getX()==this.x+60)

&&(ob.getY()+50>this.y&&ob.getY()-50

if(ob.getType()!=3){

canRight=false;

}

}

//不允许mario继续向左移动

if((ob.getX()==this.x-60)

&&(ob.getY()+50>this.y&&ob.getY()-50

if(ob.getType()!=3){

canLeft=false;

}

}

//如果符合条件则表明mario当前处在障碍物上面

if(ob.getY()==this.y+60

&&(ob.getX()+60>this.x&&ob.getX()-60

if(ob.getType()!=3){

onLand=true;

}

}

//判断当前mario在跳跃过程中是否顶到了障碍物

if(upTime>0){

if(ob.getY()==this.y-60&&(ob.getX()+50>this.x&&ob.getX()-50

//对于砖块处理

if(ob.getType()==0){

//将该砖块从场景中移除

this.bg.getAllObstruction().remove(ob);

//将被移除的砖块保存到一个集合中

this.bg.getRemovedObstruction().add(ob);

//将分数加10

this.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

Enemy e=this.bg.getAllEnemy().get(i);

if((e.getX()+50>this.x)&&(e.getX()-50this. y&&e.getY()-60

//mario死亡

this.dead();

}

if(e.getY()==this.y+60&&(e.getX()+50>this.x&&e.getX()-50

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;

}

}

相关主题
相关文档
最新文档