炸彈人游戲開發系列(1):準備工作
前言
大家好!本系列博文記錄了炸彈人游戲迭代開發的過程。在開發的過程中,代碼會不斷重構,領域模型會不斷演變,高層劃分也會不斷變化。
博文重點在于記錄面向對象思想運用、重構、迭代開發的過程,對于游戲的實現細節和原理不會深入討論。
如果您對RPG游戲的基本概念不熟悉,我推薦您可以先看看HTML5研究小組第二期技術講座《手把手制作HTML5游戲》,它講解了Html5超級瑪麗游戲開發的過程,提出了一些基本概念(如精靈、主循環等)。另外您可以學習它的代碼HTML5超級瑪麗小游戲源代碼,您可以看到它是如何一步一步實現游戲的。
希望能與大家一起分享游戲開發的過程和樂趣,為大家運用oo思想和實踐迭代開發提供力所能及的幫助。
關鍵詞
面向對象、測試驅動開發、重構、迭代、領域模型、炸彈人游戲
系列博文目錄
- 炸彈人游戲開發系列(1):準備工作
- 炸彈人游戲開發系列(2):初步設計
- 炸彈人游戲開發系列(3):顯示地圖
- 炸彈人游戲開發系列(4):炸彈人顯示與移動
- 炸彈人游戲開發系列(5):控制炸彈人移動,引入狀態模式
- 炸彈人游戲開發系列(6):實現碰撞檢測,設置移動步長
- 炸彈人游戲開發系列(7):加入敵人,使用A*算法尋路
- 炸彈人游戲開發系列(8):放炸彈
- 炸彈人游戲開發系列(9):總結
最終成果
下面是完成整個游戲開發后的成果,大家可以先預覽一下。
代碼下載
游戲截圖(已測試通過的瀏覽器:chrome、ff)
概念層次結構

畫布層級
游戲中包含了包含了多個畫布,其中地圖畫布、炸彈畫布、火焰畫布分別對應地圖層、炸彈層、火焰層,玩家畫布和敵人畫布對應人物層。下面是各個層的層疊順序,地圖層顯示在最下面,人物層顯示在最上面:

具體概念請見第2篇博文的“分層渲染”。
最終的領域模型

最終的高層劃分
層、包

對應的領域模型
- 輔助操作層
- 控件包
PreLoadImg - 配置包
Config
- 控件包
- 用戶交互層
- 入口包
Main
- 入口包
- 業務邏輯層
- 輔助邏輯
- 工廠包
BitmapFactory、LayerFactory、SpriteFactory - 事件管理包
KeyState、KeyEventManager - 抽象包
Layer、Sprite、Hash、Collection - 全局包
GameState
- 工廠包
- 游戲主邏輯
- 主邏輯包
Game
- 主邏輯包
- 層管理
- 層管理包
LayerManager
- 層管理包
- 實現
- 人物實現包
PlayerLayer、MoveSprite、PlayerSprite、EnemySprite、CharacterLayer、PlayerLayer、EnemyLayer、Context、PlayerState、WalkState、StandState、WalkState_X、WalkState_Y、StandLeftState、StandRightState、StandUpState、StandDownState、WalkLeftState、WalkRightState、WalkUpState、WalkDownState - 炸彈實現包
BombSprite、FireSprite、BombLayer、FireLayer - 地圖實現包
MapLayer、MapElementSprite - 算法包
FindPath - 動畫包
Animation、GetSpriteData、SpriteData、GetFrames、FrameData - 觀察者模式包
Subject
- 人物實現包
- 輔助邏輯
- 數據操作層
- 地圖數據操作包
MapDataOperate、TerrainDataOperate - 路徑數據操作包
GetPath - 圖片數據操作包
Bitmap
- 地圖數據操作包
- 數據層
- 地圖包
MapData、TerrainData - 圖片路徑包
ImgPathData
- 地圖包
前期準備
現在,就讓我們一起踏上游戲開發的旅程。首先來看看在炸彈人游戲開發中需要的知識和參考的資源。
需要的知識
必備知識
- Html+css
掌握html常用的標簽,掌握常用的css屬性,掌握div布局、定位等知識。能夠使用html和css來設計和顯示頁面。 - Javascript
熟悉Javascript基本語法、原型、閉包、作用域鏈等知識。 - Html5 Canvas
了解畫布原理,掌握常用的API,掌握Canvas優化。
進階知識
- 面向對象思想
熟悉oo思想,能夠運用oo來分析、設計、編程。 - 設計模式
了解23種設計模式。 - 領域驅動
了解模型驅動開發(DDD)的思想。 - 敏捷開發
了解敏捷開發流程。 - 測試驅動開發
熟悉測試驅動開發流程。
相關資源
游戲開發
- 使用Javascript和Canvas開發游戲
- 完全分享,共同進步——我開發的第一款HTML5游戲《驢子跳》
- html5游戲開發-零基礎開發RPG游戲
- Cson的博客
- HTML5研究小組第二期技術講座《手把手制作HTML5游戲》
- Andriod游戲開發
Canvas
初步需求分析
下面來進行初步的需求分析。首先進行高層的需求分析;然后根據分析結果,輸出用例、功能需求、非功能需求和約束條件。
確定高層需求
業務目標
- 學習RPG游戲領域的概念和技術。
- 學習運用面向對象思想來設計。
- 實踐測試驅動開發。
- 學習模型驅動設計。
- 實踐設計模式。
范圍
- 人工智能
如敵人使用A*算法尋路。
- 頁面繪制
如顯示地圖、人物,實現人物移動動畫。
- 事件綁定
玩家通過操作鍵盤來控制炸彈人的行為,因此游戲需要監聽判斷鍵盤事件。
- 炸彈
炸彈人能夠放置炸彈,炸彈能夠爆炸并炸死敵人和炸彈人。
Feature
- 具有良好可擴展性,方便進行二次開發。
- 學習RPG領域的概念(如精靈、層、幀的概念),提煉出相應的領域模型。
- 能夠顯示動畫。
- 敵人能夠追蹤炸彈人。
- 炸彈人能夠放炸彈,來炸毀磚墻或炸死敵人。
- 游戲規模應該控制為小規模,保持足夠的簡單性。因為開發該游戲主要是用來學習而不是用于商用。
上下文
系統、玩家

游戲角色
- 炸彈人
炸彈人可以放炸彈。該角色由玩家控制。
- 敵人
敵人會追蹤炸彈人。該角色由系統控制。
高層需求分析的輸出結果
用例

功能需求
- 預加載
玩家進入游戲后,預先加載游戲使用的圖片到內存中。
- 顯示地圖
地圖大小為20 * 20。
地圖由墻和空地組成。
墻可以被炸開。
炸彈人、敵人不能穿過墻、炸彈。
炸彈人、敵人不能走出地圖邊界。
- 顯示人物
在地圖上顯示炸彈人和敵人。
- 人物移動
炸彈人和敵人可以在地圖上移動,并以動畫顯示。
- 敵人追蹤炸彈人
使用A*算法尋找從敵人所在位置到炸彈人所在位置的路徑,并按照路徑移動。
如果遇到炸彈人,則游戲結束;如果走到終點時沒有遇到炸彈人,則再次尋找路徑,然后按照路徑移動。
- 炸彈
炸彈人移動時也能放炸彈
不能在一個方格疊加多個炸彈
炸彈可以爆炸,顯示火焰
玩家、敵人不能穿過炸彈
炸彈可以炸掉墻
炸彈可以炸死玩家、敵人
可放置多個炸彈(3個),炸彈爆炸時會引爆在火力范圍內的炸彈
- 控制炸彈人
玩家可以通過W、A、S、D鍵控制炸彈人的移動方向,一共有上下左右四個方向。
玩家可以使用空格鍵控制炸彈人放置炸彈
非功能需求
質量
開發期質量
- 良好的易理解性
通過記錄日志、SVN提交日志、測試文檔以及注釋和相關的總結文檔,開發人員可以理解游戲的架構設計(參照總結文檔、代碼)及實現(參照日志、測試文檔、代碼)。
- 良好的可擴展性
如需要增加一個敵人時,只需要增加相應代碼即可;需要增加一類敵人,只需要增加一個敵人子類及相應的客戶端代碼即可。不用修改已有的代碼,符合開閉原則。
- 良好的可重用性
即在游戲中提煉出具有通用性的模塊,供以后復用。
- 良好的可測試性
采用TDD開發,保證低耦合高內聚,增強可測試性。
運行期質量
無,因為開發炸彈人游戲僅為了個人學習,因此對性能等運行期質量沒有要求。
約束
- 開發人員沒有RPG游戲領域經驗
采用迭代開發的方法,逐步細化。
本文參考資料
《軟件架構設計》

浙公網安備 33010602011771號