詳細設計文檔


飛機大戰詳細設計說明書

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測試要點

采用黑盒測試方法,對戰機的初始值、成績顯示、以及界面與地圖上事件的觸發為測試要點。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM