详细设计文档

飞机大战详细设计说明书

1. 引言部分

1.1编写目的

该文档的目的是描述设计飞机大战的每个模块的细节,包括模块的接口、调用关系、处理过程和算法,一级模块测试方案等。本文档主要读者包括全体小组成员及指导教师。

1.2 项目背景

作为软件工程这门课程实验最终设计,该课题由我们小组提出并进行完善。项目全程由计科1704班小组成员完成。

1.3定义

战机:由玩家操控的飞机

敌机:需要被消灭的飞机

道具:随机掉落增加buff的道具

操控战机:控制战机左右上下移动

发射炮弹:对敌机进行攻击

1.4参考资料

[1] 软件工程方法与实践第3版  主编  窦万峰  机械工业出版

[2] Cocos游戏引擎

[3] JavaScript用法

1.5版本信息

具体版本信息如表1.0所示

1.0  具体版本信息

修改编号

修改日期

修改后版本

修改位置

修改内容编写

1

2019-6-3

1.0

全部

完成第一次编写

 

2.总体设计

2.1需求概述

飞机大作战系统的需求定义如下:

系统初始化设置:设置基本参数,包括游戏开始的时间,当前分数。初始化游戏对象和绘图环境。

开始游戏:系统初始化界面和对象,自动记录分数,根据指示操控战机,并显示当前成绩。

系统设置:系统根据玩家选择设置游戏参数,包括速度大小是否改变。

游戏帮助:游戏界面显示游戏相关细节说明和相关指示操作。

查看分数:游戏界面直接显示当前积分。

退出游戏:系统提示是否确认退出,系统释放游戏对象,自动显示当前积分。

用户管理:进行用户信息管理,包括注册新用户、更新用户、注销用户,以及登录验证等。

2.2软件结构

飞机大作战游戏系统的软件结构图如图所示。

 

 

 

3.程序描述

本部分针对每一个模块进行详细设计。

3.1 模块基本信息

1-1 注册模块

1-2 验证身份模块

2-1 开始游戏模块,说明如下:

功能:系统初始化界面和对象,自动记录分数,根据指示操控战机,并显示当前成绩。游戏过程中要进行碰撞检测、监听键盘和鼠标拖动事件。

2-2 系统设置模块

2-3 游戏帮助模块

2-4 查看分数模块

功能:查看当前分数

2-5 退出游戏

3.2 算法

开始游戏模块调用如下模块完成该功能:

2-1-1初始化模块

2-1-2 记录分数模块

2-1-3 操控战机模块

2-1-4 显示成绩

查看分数模块调用如下模块完成该功能:

2-4-1 显示结果

退出游戏模块调用如下模块完成该功能:

2-4-1 显示结果

3.3 程序逻辑

 

开始游戏模块程序逻辑

1.系统初始化模块

功能描述:

(1)  打开游戏,初始化游戏,生成游戏角色

(2)  开始游戏

2.操控战机模块

功能描述

(1)  根据敌机出现的位置,手动改变我方战机的位置,避免相撞

(2)  采用鼠标操控或键盘操控战机运动方向和位置

3.记录分数模块

功能描述

(1)  根据游戏过程中消灭敌机数量增加分数

(2)  分数与销毁敌机数量同时变化,并记录到游戏界面指定位置

4.显示结果模块

功能描述

(1)  游戏过程战斗过程会随时根据结果记录数据

(2)  在战斗过程中记录游戏分数变化,并将结果反馈给游戏主界面

3.4 接口

Cocos creator游戏引擎接口

3.5性能

(1)支持鼠标操作、键盘操作以及游戏手柄操作

(2)在CPU、内存占用的条件下,无重点问题发生。

3.7编码实现

本部分主要选取部分功能实现方式进行代码描述。

(1)游戏初始化场景的创建

properties: () => ({

        pause: cc.Button,     

        scoreDisplay: cc.Label,

        bombAmount: cc.Label,

        bombDisplay: cc.Node,

        pauseSprite: {

          default: [],

          type: cc.SpriteFrame,

          tooltip:'暂停按钮图片组',

        },

        hero: {

            default: null,

            type: require('hero')

        },

        bulletGroup: {

            default: null,

            type: require('bulletGroup')

        },

        enemyGroup: {

            default: null,

            type:require('enemyGroup')

        },

        ufoGroup: {

            default: null,

            type:require('ufoGroup')

        },

        bgm: {

            default: null,

            type: cc.AudioClip,

        },

        gameOverSound: {

            default: null,

            type: cc.AudioClip,

        },

        bombSound: {

            default: null,

            type: cc.AudioClip,

        },

        buttonSound: {

            default: null,

            type: cc.AudioClip,

        }

    }),

 

    onLoad: function () {

        this.initState();

        this.enemyGroup.startAction();

        this.bulletGroup.startAction();

        this.ufoGroup.startAction();

        cc.audioEngine.play(this.bgm, true);

    },

创建战斗界面场景,并通过require()引入其他界面的js文件,onLoad:function(){}监听初始化事件

(2)碰撞功能的实现

onCollisionEnter: function (other, self) {

       if (other.node.group === 'ufo'){

            switch (other.node.name) {

               case 'doubleBullet':                 

                   this.bulletGroup.changeBullet(other.node.name);

                   break;

               case 'tnt':                          

                  this.mainScript.receiveBomb();

                  break;

            }

        } else if (other.node.group === 'enemy'){    

            let anim = this.getComponent(cc.Animation); 

            let animName = this.node.name + '_exploding';

            anim.play(animName);

            anim.on('finished', this.onHandleDestroy, this);

        }

    },

(3)鼠标拖动事件

onHandleHeroMove: function (event) {

        let position = event.getLocation();

        let location = this.node.parent.convertToNodeSpaceAR(position);

        this.node.setPosition(location);

    },

(4)显示、存储分数功能

updateScore: function() {

    var currentScore = this.scoreDisplay.string;

    var scoreData = {

        'score':currentScore,

        'time': D.common.timeFmt(new Date(),'yyyy-MM-dd hh:mm:ss'),

    };

    var preData = cc.sys.localStorage.getItem('score');

    var preTopScore = cc.sys.localStorage.getItem('topScore');

    if (!preTopScore || parseInt(preTopScore) < parseInt(currentScore)){

       cc.sys.localStorage.setItem('topScore', currentScore);

    }

    if(!preData){

        preData = [];

        preData.unshift(scoreData);

       

    } else {

        preData = JSON.parse(preData);

    if (!(preData instanceof Array)){

            preData = [];   

        }

        preData.unshift(scoreData);

    }

    cc.sys.localStorage.setItem('currentScore', currentScore);

    cc.sys.localStorage.setItem('score', JSON.stringify(preData));

},

 

3.8测试要点

采用黑盒测试方法,对战机的初始值、成绩显示、以及界面与地图上事件的触发为测试要点。

 

posted @ 2019-06-07 14:36  bestSoftware  阅读(2516)  评论(0编辑  收藏  举报