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

超级玛丽JAVA小游戏详细设计文档

目录1.导言 (2)1.1编写目的 (2)1.2项目范围 (2)1.3参考资料 (2)1.4缩写说明 (2)1.5术语定义 (2)2.功能需求 (3)2.1界面设计技术 (3)2.2游戏功能划分 (3)2.3功能划分的架构图 (3)2.4具体的功能模块 (4)2.5功能描述 (4)2.6程序的总体架构 (4)2.7程序的三层结构图 (4)3.面向对象设计 (5)3.1主要类图 (5)3.2各个模块的方法或类名类表示 (6)3.3地图绘制中的坐标说明 (6)4.程序的详细设计 (7)4.1主要人物玛丽的实现 (7)4.2核心类 (7)1.导言1.1编写目的该文档的目的是说明超级玛丽游戏的功能和设计方向、目标等描述游戏项目的整体框架的实现。

其主要内容包括:游戏项目的功能简介,接口设计,模块设计,界面设计。

本文档预期读者包括:项目管理人员,编程人员,数据库设计人员,美工,测试人员。

1.2项目范围该文档定义了游戏的模块,结构单元,但未确定单元的实现方法,这部分内容将在具体的代码设计中实现。

1.3参考资料《软件工程案例教程》机械工业出版社韩万江编著《J2ME手机游戏开发技术详解》清华大学出版社李振鹏龚剑编著1.4缩写说明UML:Unified Modeling Language(统一建模语言)的缩写,是一个标准的建模语言。

1.5术语定义MIDP 2.0 定义:MIDP 2.0 也叫MIDP_NG,它的编号是JSR 118。

MIDP2.0 与1.0相比有很大提高,增加的特性包括:提供域安全模型,以允许对应用程序进行签名和论证;提供TCP、UDP网络接口;内置OTA;更好的用户界面;基本的声音API。

2.功能需求2.1界面设计技术1)选取和谐Q版的图片,使画面色彩和谐自然,配合动听的音乐渲染游戏气氛2)采用对话框方式,多功能窗口运行,固定窗口大小便于程序编写,键盘操作游戏角色。

3)使用低级用户界面,响应低级用户事件,不使用MIDP2.0GameAPI4)地图数据采用char类型,对每一个地图块的大小为16×16像素,采用单层地图,以提高游戏的运行速度5)居于多线程,实现进度条2.2游戏功能划分游戏的基本功能应该包括菜单处理,程序逻辑处理,持久性处理和挂起恢复处理。

◆关于菜单的处理,包括可以选择的进入游戏、保存、帮助和音效开关等。

◆程序的逻辑处理就是涵盖了程序中除菜单外几乎所有的功能。

◆持久性处理就是资源的载入和游戏的进度保存。

2.3功能划分的架构图2.4具体的功能模块1)游戏控制模块2)查询记录模块3)关卡选择模块4)游戏设置模块2.5功能描述玩家打开程序,在游戏菜单页面有四个选项。

◆关卡选择:选择已玩过的关卡进行游戏;◆开始游戏:从游戏的第一关进行游戏,玩家通过按键控制主人公马里奥进行不同的操作;◆查询记录:查询五个最高游戏分数,排名由上往下递减。

◆游戏设置(包括音乐设置和按键设置):玩家可以设置游戏进行时的音乐开或关以及修改相应的控制键。

2.6程序的总体架构本程序采用3层程序架构,业务表现层,业务逻辑层和数据持久层。

◆业务表现层。

主要是游戏界面的绘制,通过指定的接口绘制,与游戏的逻辑分离。

◆业务逻辑层。

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

保存游戏中的数据,载入游戏中需要的资源,与程序逻辑层无关,用XML文档存储数据2.7程序的三层结构图3.面向对象设计3.1主要类图3.2各个模块的方法或类名类表示3.3地图绘制中的坐标说明4.程序的详细设计4.1主要人物玛丽的实现public class MarioMainSprite extends LPSprite{public MarioMainSprite(MarioGameManage gm,LPMaps map){public void action() //重写基类private void spriteDeadAction() //玛丽死时的动作private void checkEnemyCollision() //检查与敌人碰撞private void mainSpriteDamage() //检查是否踩到敌人private boolean checkStaticSpriteCollision() //检查与静止不动的物品碰撞,private void judgeKeyCode(int keyCode,int gameKeyCode)private void freeKey(int KeyCode,int gameKeycode) //按键处理private void walk() //人物走的动作private boolean checkTileCollisionVertical() //检查与地图的纵向碰撞private boolean checkTileCollisionHorizon() //检查与地图的横向碰撞private void fire() //发射子弹private boolean checkSpriteCollisionVertical() //检查纵向与敌人碰撞private boolean checkSpriteCollisionHorizon() //检查横向与敌人碰撞private void checkBulletDamage() //检查子弹与敌人的碰撞public void init() //初始化private void changeUpSpriteState() //检查砖块上方是否有敌人public void readData(DataInputStream dis) //读取数据throws java.io.IOExceptionpublic void writeData(DataOutputStream dos) //保存数据throws java.io.IOException}}4.2核心类public class LPSprite{public int x; //横坐标public int y; //纵坐标public int frameCnt; //Sprite 的帧计数器public boolean isHidden; //Sprite 是否隐藏protected int timeCnt; //Sprite 的时间计数器protected int offset; //Sprite 的图片偏移public void action(){//Sprite 的动作}public void reInit(int x,int y) //重新初始化函数{this.x=x;this.y=y;isHidden=false;}public void writeData(DataOutStream dos) throws IOException //持久化操作接口、写数据、派生类重写时必须首先调用此函数{dos.writeInt(x);dos.writeInt(y);dos.writeInt(frameCnt);dos.writeBoolean(isHidden);dos.writeInt(timeCnt);dos.writeInt(offset);}public void readData(DataInputStream dis) throws IOException{x=dis.readInt();y=dis.readInt();frameCnt=dis.readInt();isHidden=dis.readBoolean();timeCnt=dis.readInt();offset=dis.readInt();}//地图绘制的实现public class LPMaps{public char mapArray[][];public int x;public int y;public int w;public int h;public int tileSize;public final LPImageManage image;public String mapId;public LPMaps(LPImageManage image,char array[][],int w,int h,int tileSize,String id){this.image = image;mapArray = array;this.x = 0;this.y = 0;this.w = w;this.h = h;this.tileSize = tileSize;mapId = id;}}//保存记录public class LPSaveRecord{private RecordStore rs;private String rsName;public LPSaveRecord(String name){rsName=name;try{if(existRecordStore(name)){rs=RecordStore.openRecordStore(name,false);}else{rs=RecordStore.openRecordStore(name,true);}}catch(RecordStoreNotFoundException e){System.out.println("Open Record Error");System.out.println(e.toString());}catch(Exception e){System.out.println(e.toString());}}public void addRecord(byte[] rec){try{rs.addRecord(rec,0,rec.length);}catch(Exception e){System.out.println("Add Record Error");System.out.println(e.toString());}}public void close(){try{rs.closeRecordStore();}catch(Exception e){System.out.println("Close Record Error");System.out.println(e.toString());}}public boolean IsEmpty(){try{if(rs.getNumRecords()>0){return false;}else{return true;}}catch(Exception e){System.out.println("Get Record Number Error"); System.out.println(e.toString());}return true;}public void SetRecord(int recordId,byte[] buffer) {try{rs.setRecord(recordId,buffer,0,buffer.length); }catch(Exception e){System.out.println("Set Record Error");System.out.println(e.toString());}}public byte[] getRecord(int recordId){byte buffer[];try{buffer=rs.getRecord(recordId);return buffer;}catch(Exception e){System.out.println("Get Record Error");System.out.println(e.toString());}return null;}public void removeAll(){try{rs.deleteRecordStore(rsName);}catch(Exception e){System.out.println("Remove All Record Error"); System.out.println(e.toString());}}private boolean existRecordStore(String recordName){boolean existRs=true;RecordStore rsTemp=null;try{rsTemp=RecordStore.openRecordStore(recordName,false); }catch(Exception e){existRs=false;System.out.println("Test Record Exist Error");System.out.println(e.toString());}finally{try{rsTemp.closeRecordStore();}catch(Exception e){System.out.println("Close Record Error");System.out.println(e.toString());}}return existRs;}}还有些代码还没有实现.....。

相关主题