軟體系統規格書 SDD === # 目錄 ``` 1. 簡介 1.1 文件目的 1.2 文件範圍 2. 系統概述 2.1 系統目標 2.2 系統範圍 2.3 系統架構 2.4 系統軟體需求概述 2.5 系統軟體環境需求 2.6 系統軟體設計限制 3. 系統初步設計 (UML) 3.1 系統使用者介面結構層次圖 3.2 系統模組功能架構圖 3.3 系統類別初步描述 4. 系統細部設計 (UML) 4.1 系統使用者介面流程設計 4.2 系統模組功能細部描述 4.3 系統類別細部描述 4.4 系統類別資料結構細部描述 4.5 系統類別成員函數細部描述 5. 系統需求至系統設計之追溯 5.1 XXX 子系統之追溯 6. 附錄 6.1 參考書目 6.2 專有名詞解釋 6.3 專有名詞中英對照 ``` # 1. 簡介 ## 1.1 文件目的 系統軟體設計文件(software design document)主要包括初步設計及 細部設計兩部份。目的乃在於透過軟體設計文件的製作,使得系統開發 者得以進一步來確認與契合系統的實際需求,並在經過實體建構查核之 後,得以成為產品基準(product baseline)。 系統軟體設計文件將能夠提供系統開發者在實際開發系統時,有一可依 循的準則。 ## 1.2 文件範圍 系統軟體設計文件適用於整體系統軟體實際研製開發的所有發展過程, 乃是系統開發時必須時時刻刻遵循的準繩。 對於本系統的所有開發者均應確實依循本文件中的內容,實際從事系統 開發的工作。 # 2. 系統概述 ## 2.1 系統目標 玩家操控 sparrow 一起合作將 sparrow 們寶貴的蛋,送至目的地,途中會遭遇各種怪物和燒腦的機關,俗話說三個臭皮匠勝過諸葛亮,遇到複雜的機關,最多可以連線 10 隻 sparrow 合作。 ## 2.2 系統範圍 - 實作 Client/Server 多人連線遊戲(最多十人) - 實作簡易物理引擎 - 遊戲畫面擁有高刷新率,144Hz - 豐富的關卡設計(2關以上) - 多種玩法編織而成(2種模式以上) ## 2.3 系統架構 client_server client.py client的主程式 server.py server的主程式 settings.py settings.py放設定的地方 ![image](https://hackmd.io/_uploads/B12HjyLIa.png) #### common - camera.py 用於演算每個玩家看到的視角 - global_variable.py 存放程式的全域變數 - players.py 存放玩家列表的陣列 #### entities - sprite.py 繼承自pygame.sprite,是遊戲內所有實體原型 - block.py 繼承自sprite,是地圖中的最小單位。 - player.py 繼承自sprite #### map - scan_map.py 將像素圖片轉換成遊戲內的地圖物件 #### network - client_socket.py client 所用的 socket 主程式 - server_socket.py server 所用的 socket 主程式 - utils.py socket 共用的方法,序列化與反序列化。 ## 2.4 系統軟體需求概述 系統預計可以輕鬆跑在各個電腦上,對於硬體要求不高,只需要有安裝python中的Pygame和socket就可以 ## 2.5 系統軟體環境需求 - 硬體平台:運行在PC上 - 作業系統:Windows - 檔案大小:1GB - 遊戲類型:冒險、角色扮演、策略、模擬 - 遊戲規模:遊戲可以單人、多人遊玩 - 伺服器規格:須符合Client/Serve(主從式架構) ## 2.6 系統軟體設計限制 #### Pygame == 2.5.2 pygame 是跨平台 Python 套件,專為電子遊戲設計。包含圖像、聲音,建立在SDL基礎上。 #### Pillow == 10.1.0 用於處理影像相關的 Python 套件 #### Numpy NumPy是 Python 語言的一個擴充程式庫。支援高階大規模的多維陣列與矩陣運算,此外也針對陣列運算提供大量的數學函數函式庫。 #### Pickle Pickle是python內建的套件,依照官方的定義是對物件結構提供了一個二進制序列化與反序列化功能的模組。 # 3. 系統初步設計 (UML) ## 3.1 系統使用者介面結構層次圖(use case diagram) ![image](https://hackmd.io/_uploads/BJhoE188T.png) ## 3.2 系統模組功能架構圖(sequence diagram) ### 遊玩 ![image](https://hackmd.io/_uploads/rkL2mJII6.png) ### non-blocking ![image](https://hackmd.io/_uploads/B1i27JL86.png) ## 3.3 系統類別初步描述(class diagram) ![image](https://hackmd.io/_uploads/SynsmJL86.png) # 4. 系統細部設計 (UML) ## 4.1 系統使用者介面流程設計 ### 開始畫面 ![image](https://hackmd.io/_uploads/BJgn5AHIa.png) ### 遊玩畫面 ![image](https://hackmd.io/_uploads/S1zp5CBU6.png) ### 結束畫面(勝利) ![image](https://hackmd.io/_uploads/B1_eiCB8a.png) ### 結束畫面(失敗) ![image](https://hackmd.io/_uploads/HJoWoCHI6.png) ## 4.2 系統模組功能細部描述(wbs ## 4.3 系統類別細部描述(wbs ## 4.4 系統類別資料結構細部描述(wbs ## 4.5 系統類別成員函數細部描述(wbs # 5. 系統需求至系統設計之追溯 ## 5.1系統追溯工具 ### GitHub #### Commit 語法 ##### Header commit 顯示的主要訊息,可以想成標題,請參考以下種類與範例。 ``` feat: 新增/修改功能 (feature)。(升級也可) fix: 修補 bug (bug fix)。 docs: 文件 (documentation)。 style: 格式 (不影響程式碼運行的變動 white-space, formatting, missing semi colons, etc)。 refactor: 重構 (既不是新增功能,也不是修補 bug 的程式碼變動)。 perf: 改善效能 (A code change that improves performance)。 test: 增加測試 (when adding missing tests)。 chore: 建構程序或輔助工具的變動 (maintain)。 revert: 撤銷回覆先前的 commit 例如:revert: type(scope): subject (回覆版本:xxxx)。 ``` ``` 格式 <type>: <title> ``` ``` 範例 feat: 新增碰撞系統 fix: 修正 socket 錯誤 ``` --- ##### Body 將更改的檔案列出來,並說明修改內容,參考以下範例 ``` 格式 <檔案路徑> - 修改內容 ``` ``` 範例 src/block.py - 修正地形碰撞 src/main.py - 新增設定檔路徑 ``` --- ##### Issue 標題和上面 commit 一樣,但不需要加上 commit 種類,需另外加上 label。 ![](https://hackmd.io/_uploads/SJ64d5Txp.png) --- ##### Branch 分支命名規則 原則上一個 issue 一個 branch,issue 跟 branch 可以想成一組的。 注意!因 branch 名稱不得有空格,所以需要用 `-` 來取代空格,可以參考以下範例。 ``` 格式 <issue_type>/issue#<issue_id>:-<issue_title> ``` ``` 範例 feat/issue#1:-修正碰撞 ``` ---