詳細設計說明書
1. 引言
1.1 編寫目的
在分析《貪吃蛇游戲的需求分析說明》的基礎上,我們對該系統做了概要設計,主要是基於以下目的編寫此說明書:
1.對系統概要設計的的階段任務成果形成文檔,以便階段驗收、評審,最終的階段驗收。
2.對需求階段的文檔再次確認過程,對前一階段的需求不充分的地方或者有錯誤的地方進行修改。
3.明確整個系統的功能框架和數據結構,為下一階段的詳細設計、編碼、測試提供參考依據。
4.明確編碼規范和命名規范,統一程序界面。
預期讀者:詳細設計人員、概要設計評審小組、研究院領導。
1.2 背景
系統名稱:貪吃蛇游戲
任務提出者:策划人員
開發者:技術人員
1.3 定義
- 節:
一條蛇可以看成由許多正方形的“小格子”拼湊成,稱作節。節是蛇身上最小的單位。
- 鏈表:
用來保存每一段的狀態,鏈表的元素單位是節。且鏈表的第一個元素表示蛇的頭部。
- 坐標系:
以左上角那點為(0,0),向右則x遞增,向下則y遞增。
1.4 參考資料
張海藩:《軟件工程導論》第五版 清華大學出版社
肖剛等:《實用軟件文檔寫作》
2 總體設計
2.1 需求規定
2.1.1輸入、輸出
輸入:操作選擇、級別
輸出:時間、分數
2.1.2 功能要求
本設計所開發的是基於腳本語言的一個貪吃蛇游戲軟件,主要實現游戲的開始、暫停、退出等功能,分為:游戲主界面模塊、游戲控制模塊兩個模塊。
2.1.3 性能要求
本游戲在設計方面本着方便、實用及娛樂性高的宗旨,在對界面進行設計的過程中,始終堅持清晰明了,在性能方面能夠實現效率高,不易出錯等優點。
游戲主界面應該力求美觀,賞心悅目。游戲控制模塊應做到易懂、易操作,而且准確率高,不易出錯。
2.2 運行環境
本次設計的系統環境及工具:
運行環境:WindowsXP
編程語言:腳本語言PHP
使用工具:Eclipse 編輯器Sublime 游戲引擎Quick-CocoS2dx-community
2.3 基本設計概念和處理流程
2.3.1基本設計概念如下:
程序關鍵在於表示蛇的圖形及蛇的移動。用一個小矩形快表示蛇的一節身體,身體每長一節,在身體最后增加一個矩形塊。移動時必須從蛇頭開始,所以蛇不能向相反的方向移動,如果不按任意鍵,蛇自行在當前方向上前移,但按下有效方向鍵后,蛇頭朝着該方向移動,一步移動一節身體,所以按下有效方向鍵后,先確定蛇頭的位置,而后蛇的身體隨蛇頭移動,圖形的實現是從蛇頭新位置開始畫出蛇,長度為保存蛇每個節點信息的鏈表的長度。食物的出現是先確定一組隨機數,再填充方格,食物的消失是由於使用了清屏函數,當吃掉食物后就不再重畫本次食物,而是生成一組新的隨機數,畫新的食物。當蛇頭的位置坐標和石頭的坐標或者自己身體的某個節點的坐標相同時,蛇就死掉了,游戲結束。
2.3.2處理流程如下:

2.4 結構
- Ground類:
1) private int TYPE;
2) public int[][] rocks=new int[Global.WIDTH][Global.HEIGHT];
3) public void setGround(int type){}
4) public boolean isSnakeEatRock(Snake snake){}
5) public Point getPoint(){}
6) public void drawMe(Graphics g){}
7) 功能:根據不同的布局類型畫出不同的石頭布局
- Snake類:
1) public static int x,y;
2) private int oldDirection,newDirection;
3) private Point oldTail;
4) public LinkedList<Point> body=new LinkedList<Point>();
5) public void die(){}
6) public void move(){}
7) public void changeDirection(int direction){}
8) public void drawMe(Graphics g){}//把屬於蛇的格子畫出來
9) private class SnakeDriver implements Runnable{}//蛇不停走動
10) 功能:根據有效方向鍵改變坐標值,實現蛇的定時移動
- Food類:
1) public void drawMe(Graphics g){}
2) 功能:根據生成的隨機數畫出食物
- Controller類:
功能:處理按鍵時間,處理邏輯。根據不同的情況向Snake,Food,Ground發出不同的命令
- GamePanel類:
功能:畫出Snake,Food,Ground,並實現重新顯示
2.5 功能需求與程序的關系
- 游戲界面主框架主要包括游戲圖形主界面、開始界面。
1) 游戲圖形主界面主要包括:食物的隨機位置、石頭的布局、蛇的移動位置
2) 開始界面包括:開始、繼續、暫停、歷史最高分、游戲說明、退出等按鈕。
- 與程序的關系:
1) 開始界面StartPanel畫出開始、繼續、暫停、歷史最高分、游戲說明、退出等按鈕。
2) 游戲圖形主界面GamePanel畫出Snake,Ground,Food。用戶在StartPanel選擇按鈕或者按下快捷鍵,Controller類判斷邏輯或響應事件,向Snake,Ground,Food發出命令,分別執行,最后由GamePanel實現刷新並顯示。
2.6 人工處理過程
由用戶選擇游戲控制類別:開始、暫停、繼續、歷史最高分、游戲說明、退出,或者選擇有效方向鍵。
2.7 尚未解決的問題
沒有實現畫出一個限時食物,蛇要在倒計時內吃到食物,否則倒計時結束,食物消失。
3 接口設計
3.1 內部接口
SnakeListener:
Void SankeMoved(Snake);
4 運行設計
4.1 運行模塊組合
- 在控制面板選擇NewGame,Cotroller類響應事件,發命令給Snake類開啟一個線程,及GamePanel類重畫Snake,Food,Ground。
- 選擇Pause,Controller類發命令給Snake類暫停移動,GamePanel類暫停刷屏,Time類停止計時,SaveGame類保存當前Food、Ground等級、Snake每個節點的位置。
- 選擇Resume,從文件中讀取Food、Ground等級、Snake每個節點的位置。Time類開始計時,GamePanel類開始刷屏,重畫Snake,Food,Ground,Snake類開始蛇的定時移動。
- 選擇HighScore,Cotroller類響應事件,發命令給highScore類從文件中讀取保存的信息,並顯示。
- 選擇LowLevel、Highlevel,Cotroller類發命令給Ground類,設置石頭的信息。
- 選擇Description,Cotroller類響應按鈕點擊事件。
- 選擇Exit,Cotroller類響應按鈕點擊事件。
- 當蛇死掉時,Cotroller發命令給Snake類使蛇die(),highScore類保存當前分數,和歷史分數比較。選取最高的六次,並排序。
4.2 運行控制
由用戶選擇游戲控制類別:開始、暫停、繼續、歷史最高分、游戲說明、退出,或者選擇有效方向鍵。尚未暫停不能選擇繼續。歷史最高分、游戲說明任何時候都可以選擇,游戲沒結束時不能選擇退出,可以暫停,下次再運行時可以選擇新游戲或者繼續。
4.3 運行時間
該游戲軟件運行時,Snake、Food、Ground三個對象一致同時存在,直到戲結束。其中蛇移動方法長期占用資源,改變方向、吃到食物及石頭都是瞬發動作,只是瞬間占用系統資源。
5 系統出錯處理設計
5.1 出錯信息及補救措施
| 可能的出錯或故障情況 |
系統輸出信息的形式、含意 |
處理方法 |
| 按鈕連續選擇兩次 |
蛇的速度加快或是拋出異常 |
每個按鈕在選擇后設為灰顯 |
| 游戲在進行時選擇新游戲 |
蛇的速度加快 |
在游戲開始后newGame按鈕變灰顯 |
