MAZE系统详细设计书.docx

上传人:b****8 文档编号:9819889 上传时间:2023-05-21 格式:DOCX 页数:36 大小:82.90KB
下载 相关 举报
MAZE系统详细设计书.docx_第1页
第1页 / 共36页
MAZE系统详细设计书.docx_第2页
第2页 / 共36页
MAZE系统详细设计书.docx_第3页
第3页 / 共36页
MAZE系统详细设计书.docx_第4页
第4页 / 共36页
MAZE系统详细设计书.docx_第5页
第5页 / 共36页
MAZE系统详细设计书.docx_第6页
第6页 / 共36页
MAZE系统详细设计书.docx_第7页
第7页 / 共36页
MAZE系统详细设计书.docx_第8页
第8页 / 共36页
MAZE系统详细设计书.docx_第9页
第9页 / 共36页
MAZE系统详细设计书.docx_第10页
第10页 / 共36页
MAZE系统详细设计书.docx_第11页
第11页 / 共36页
MAZE系统详细设计书.docx_第12页
第12页 / 共36页
MAZE系统详细设计书.docx_第13页
第13页 / 共36页
MAZE系统详细设计书.docx_第14页
第14页 / 共36页
MAZE系统详细设计书.docx_第15页
第15页 / 共36页
MAZE系统详细设计书.docx_第16页
第16页 / 共36页
MAZE系统详细设计书.docx_第17页
第17页 / 共36页
MAZE系统详细设计书.docx_第18页
第18页 / 共36页
MAZE系统详细设计书.docx_第19页
第19页 / 共36页
MAZE系统详细设计书.docx_第20页
第20页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

MAZE系统详细设计书.docx

《MAZE系统详细设计书.docx》由会员分享,可在线阅读,更多相关《MAZE系统详细设计书.docx(36页珍藏版)》请在冰点文库上搜索。

MAZE系统详细设计书.docx

MAZE系统详细设计书

MAZE系统游戏

 

详细设计说明书

 

学院名称:

计算机学院

专业名称:

信管

组员:

信管学生

 

详细设计说明书

1引言

1.1编写目的

详细设计说明书对MAZE游戏的总体设计和各个模块的功能、性能、输入输出、算法、接口、程序逻辑、存储分配及其它给出了详细的设计方案,为软件开发制定详细的计划,同时也提交系统分析员,由其提出意见。

这是程序员开发及未来测试烦人重要文档资料。

1.2背景

a.开发软件名称:

MAZE系统

b.项目开发小组成员:

信管学生

c.用户:

所有喜欢玩这个游戏的玩家

d.项目开发环境:

WindowsXP+Eclipse+SDK。

1.3定义

MAZE项目详细设计方案。

1.4参考资料

(1)《软件工程案列开发与实践》,刘竹林等,清华大学出版社

(2)《Java课程设计案例精编》,张广彬、孟红蕊,张永宝,清华大学出版社

(3)《马士兵视频全集》,马士兵,北京尚学堂

2程序系统的结构

本次所设计MAZE游戏的程序主结构如图2-1所示。

 

3程序(标识符)设计说明

从本章开始,逐个地给出各个层次中的每个程序的设计考虑。

以下给出的提纲是针对一般情况的。

对于一个具体的模块,尤其是层次比较低的模块或子程序,其很多条目的内容往往与它所隶属的上一层模块的对应条目的内容相同,在这种情况下,只要简单地说明这一点即可。

3.1程序描述

主要功能:

MAZE系统开发的是警匪对战游戏,玩家可以自由添加警察,小偷角色在任何游戏中任何位置,然后警察和小偷会自动在游戏中搜索对方并根据自身情况消灭敌人,游戏过程中队友之间可以相互通信,也可以在游戏中加入迷宫场地,增加游戏的趣味。

可扩展性:

能够适应应用要求的变化和修改,具有灵活的可扩充性。

3.2功能

游戏界面主框架主要包括游戏图形区域界面、菜单栏,状态栏,时间墙。

菜单栏中有菜单项:

“游戏”,“绘图”,“添加人员”,“新功能”,“音乐”,“关于”,“帮助”等。

游戏画布区主要应该包括游戏画布中警察,小偷,子弹,爆炸等图片出现的位置。

按键说明:

键值

作用

UP

向上运动

DOWN

向下运动

LEFT

向左运动

RIGHT

向右运动

SPACE

Fire

SHIFT

superfire

F2

重生

F3

Speed=15

F4

Speed+=5

F5

Speed-=5

S

保存游戏进度

O

打开历史记录

简单布局:

图-1简单布局

3.3性能

3.3.1精度

1、在执行游戏页面首次加载的时候,不允许出现因为程序的原因导致增加加载失败;

2、在执行Agent删除操作的时候,不允许因为程序的原因发生多删除Agent、删除失败的情况

3.3.2时间特性要求

把用户进入游戏界面的时间要求在3秒内,对鼠标点击添加人员,响应时间规定在2秒内。

3.3.3灵活性

A、操作方式

程序在通常的应用环境下使用鼠标和键盘进行输入和输出操作,对于执行菜单项,通常使用鼠标的点击完成。

B、运行环境

WINDOWSXP操作系统。

3.4方法

3.4.1PTClient主文件类

属性:

类型

名称

说明

int

F_EIDTH

框架高度

int

F_HEIGHT

框架宽度

boolean

tPaint

游戏开始控制

boolean

mousePaint

鼠标绘图控制

boolean

addp

加入Police

boolean

addt

加入Thief

boolean

me

亲自参战

boolean

addMy

加入自己

boolean

isSpuer

隐身

boolean

addBackMusic1

加入背景音乐

boolean

addThiefTen

加入十个Thief

boolean

isWall

是否画出墙壁

boolean

isWin

判断游戏是否结束

boolean

stopContinue

暂停/继续

boolean

myPolice

绘制我的人物

方法:

类型

方法名

作用

publicstaticvoid

main()

主线程控制,建立主线程

publicvoid

Paint()

绘图方法初始化游戏界面

publicvoid

Update()

更新界面

Publicvoid

lauchFrame()

设计外观布局,添加菜单项监听事件

Publicvoid

actionPerformed()

行为事件实现

类:

类型

类名

说明

Publicclass

PaintThread

开辟绘图线程

ImplementsRunnable()

外部类

Monitor

ExtendsMouseAdapter{}

鼠标监听

外部类

keyMonitor

Extends

keyAdapter{}

键盘监听

PTClient算法核心:

//启动主线程

publicstaticvoidmain(String[]args){

finalPTClienttc=newPTClient();

tc.lauchFrame();

}

//绘图线程

publicclassPaintThreadimplementsRunnable{

publicvoidrun(){

while(tPaint){

if(0==second%10)time.timeUp();

repaint();

try{

Thread.sleep(100);//每0.1秒绘制一次画面

second++;

}catch(InterruptedExceptione){

e.printStackTrace();

}

}

}

}

3.4.2Police类

属性:

类型

名称

说明

Privatestaticint

P_W=30

Police宽度为30

Privatestaticint

P_H=30

Police高度为30

int

x

Police在游戏中的横坐标

int

y

Police在游戏中的纵坐标

int

oldX

Police上个位置的坐标防止粘墙

int

oldY

Police上个位置的纵坐标

Privateint

speedX=15

Police在横坐标方向的速度

Privateint

speedy=15

Police在纵坐标方向的速度

Privateboolean

Live=true

判断Police是否还活着

PrivateBoolean

bb=newBloodBar()

Police的体力图形化表示,BloodBar()是个内部类

PrivateBoolean

good=true

用于区分敌友

Privateint

Life=200

体力值

Privateint

safeL=30

安全距离

Privateboolean

isRand=true

判断是否要随机移动

Privateint

fireNum=7

设置开火频率

PrivateDirection

dir=Direction.STOP

初始化Police方向为静止

PrivateDirection

ptdir=Direction.U

初始化Police枪口方向,为向上

Privateboolean

bL=false

bU=false

bR=false

bD=false

控制Police方向的改变

PTClient

tc

引用PTClient

Privateboolean

isMe

看是不是自己

PrivatestaticToolkit

tk

获得文件路径

PrivatestaticImage[]

personImage=null

引入Police图片

方法:

类型

名称

说明

public

Police

Police类的构造函数

参数Police的坐标x,y

方向dir,好坏good

应用tc,区分自己的isMe

Publicvoid

draw(Graphicsg)

Police的绘制函数

用于绘制Police在各个方向的图像,g是传递而来的画笔

void

move()

控制Police的八个方向的移动

PublicRectangle

getRect()

获得Police所占的区域,用于检测是否发生碰撞

Publicvoid

collideWall(Wallw)

处理Police的撞墙

Publicvoid

fire()

控制Police的开火

Publicvoid

Superfire()

附加功能,控制自己的人物一次朝八个方向开火

Publicint

getLife()

获取Police现有生命值

Publicint

setLife(intlife)

设定police的生命值为life

Publicboolean

isLive()

判断Police是否活着

Publicboolean

isGood()

用于区分敌友

Publicint

getX()

getY()

获取Police的坐标

Publicboolean

Search()

搜索方法,当遇到敌人是判断是攻击,求救还是逃跑

Publicvoid

getSpeedX()

getSpeedY()

获得Police的当前速度

Publicvoid

setSpeedX(intspeedX)

setSpeedY(intspeedy)

当中弹是改变Police的速度

void

locateDirection()

根据bL,bU,bR,bD改变Police运动方向

Publicvoid

keyReleased()

重写键盘释放方法

内部类:

Publicclass

BloodBar{}

设置Police头顶的血液条

Police类的核心算法:

//移动算法

voidmove(){

//在自由移动时撞到墙返回上一步,重选方向

this.oldX=x;

this.oldY=y;

switch(dir){//根据运动方向改变位置

caseL:

x-=speedX;

break;

caseLU:

x-=speedX;

y-=speedY;

caseU:

y-=speedY;

break;

caseRU:

x+=speedX;

y-=speedY;

caseR:

x+=speedX;

break;

caseRD:

x+=speedX;

y+=speedY;

caseD:

y+=speedY;

break;

caseLD:

x-=speedX;

y+=speedY;

caseSTOP:

break;

}

if(true==isMe){

if(dir!

=Direction.STOP){

ptdir=dir;

}

}

//判断是否到达map边界

if(x<0)x=0;

if(y<60)y=60;

if(x+Police.P_W>PTClient.F_WIDTH-110)x=PTClient.F_WIDTH-Police.P_W-110;

if(y+Police.P_H>PTClient.F_HEIGHT)y=PTClient.F_HEIGHT-Police.P_H;

if(false==isMe){

if(isRand){

Direction[]dirs=Direction.values();

if(step==0){

intrn=r.nextInt(dirs.length);

dir=dirs[rn];

step=r.nextInt(12)+3;

}

step--;

}

if(!

isRand){//控制开火

if(fireNum==0)

{

fire();

fireNum=7;

}

fireNum--;

}

isRand=true;

search();

}

}

//搜索search()算法

publicbooleansearch(){

intx1=x,y1=y;

intx2,y2;

intm=1000000000;

Rectangler=newRectangle(x-200,y-200,400,400);

for(inti=0;i

Robberpt=tc.thiefs.get(i);

if(pt.getRect().intersects(r)){//看敌人是否在攻击区域内

isRand=false;//若在则不随机移动

x2=pt.getX();

y2=pt.getY();

if(m>this.distance(x,y,x2,y2)){

x1=x2;

y1=y2;

}

}//if

elsecontinue;

intrLife=pt.getLife();

intt1=x-x1;

intt2=y-y1;

if(t1<0)t1=-t1;

if(t2<0)t2=-t2;

if(0==t1){//当在同一条垂直线上时

if(this.life>=rLife)//若强则进攻

{

if(y>y1&&t2>safeL){

dir=Direction.U;

ptdir=Direction.U;

}

elseif(ysafeL){

dir=Direction.D;

ptdir=Direction.D;

}elseif(y>y1){

ptdir=Direction.U;

dir=Direction.STOP;

}elseif(y

ptdir=Direction.D;

dir=Direction.STOP;

}

}//if(this.life)

else//否则逃跑

{

if(y>y1){

dir=Direction.D;

ptdir=Direction.U;

}

elseif(y

dir=Direction.U;

ptdir=Direction.D;

}

}

}

if(0==t2){//若在同一水平线上时

if(this.life>=rLife)

{

if(x>x1&&t1>safeL){

dir=Direction.L;

ptdir=Direction.L;

}

elseif(xsafeL)

{

dir=Direction.R;

ptdir=Direction.R;

}

elseif(x>x1)

{

dir=Direction.STOP;

ptdir=Direction.L;

}

elseif(x

{

dir=Direction.STOP;

ptdir=Direction.R;

}

}

else{//t逃跑

if(x>x1){

dir=Direction.R;

ptdir=Direction.L;

}

elseif(x

{

dir=Direction.L;

ptdir=Direction.R;

}

}

}

if(t1!

=0&&t2!

=0&&t1>=t2){//水平差距大

if(this.life>=rLife){//攻击

if(x>x1){

dir=Direction.L;

ptdir=Direction.L;

}

elseif(x

{

dir=Direction.R;

ptdir=Direction.R;

}

}

else//逃跑

{

if(x>x1){

dir=Direction.R;

ptdir=Direction.L;

}

elseif(x

{

dir=Direction.L;

ptdir=Direction.R;

}

}

}

if(t1!

=0&&t2!

=0&&t1

if(this.life>=rLife){//攻击

if(y>y1){

dir=Direction.U;

ptdir=Direction.U;

}

elseif(y

dir=Direction.D;

ptdir=Direction.D;

}

}

elseif(this.life

{

if(y>y1){

dir=Direction.D;

ptdir=Direction.U;

}

elseif(y

dir=Direction.U;

ptdir=Direction.D;

}

}

}

}//for()

returntrue;

}

3.4.3Bullet类

属性:

类型

名称

说明

Privateint

x,y

记录子弹的坐标

Privateint

initX,initY

记录产生子弹的位置

用于控制子弹的有效攻击距离

Privateint

Blen=300

初始化子弹的有效攻击距离为300

Privatestaticint

B_W=10

子弹宽度

Privatestaticint

B_H=10

子弹高度

Privateint

speedX=25

speedy=25

初始化子弹横纵坐标方向的速度为25

Privateboolean

good

判断子弹的好坏

用于区分是敌方子弹还是己方子弹

PrivateDirection

dir

设置子弹方向

PTClient

tc

PTClient引用

PrivatestaticImage[]

bulletImage

存放子弹各个方向的图片

方法:

类型

名称

说明

public

Bullet()

子弹类的构造函数

参数:

子弹的横纵坐标x,y,子弹的方向dir

子弹的好坏good,以及PTClient引用tc

Publicvoid

draw(Graphicsg)

子弹的绘图函数绘制子弹各个方向各个时刻的图像

void

move()

控制子弹的八个方向的移动

PublicBoolean

isGood()

用于区分敌我子弹

己方子弹不伤害己方人员

Publicboolean

isLive()

判断子弹是否还活着

若死亡则清理出屏幕

Publicvoid

collideWall(Wallw)

处理子弹撞墙

Publicvoid

collidePolice(Policepp)

处理子弹撞击警察

Publicvoid

collideThief(Robberpt)

处理子弹撞击Thief

Publicint

getSpeedX()

getSpeedY()

获得子弹现有的速度

Publicint

setSpeedX()

setSpeedY()

重设子弹的速度

Bullet类的核心算法:

//子弹撞击Police的处理

publicvoidcollidePolice(Policepp){

if(this.live&&pp.isGood()!

=this.good&&this.getRect().intersects(pp.getRect())&&pp.isLive()){

this.live=false;

pp.setLife(pp.getLife()-50);

pp.setSpeedX(pp.getSpeedX()-3);

pp.setSpeedY(pp.getSpeedY()-3);

if(pp.getLife()<=0){

pp.setLive(false);

}

if(pp.getLife()<=100){

newSound(Sound.need_help);

}

Explodee=newExplode(x,y,tc);

tc.explodes.add(e);

tc.bullets.remove(this);

}

}

3.4.4Wall类

属性:

类型

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2