# <p class="text-center"> 程式設計專案 書面報告 </p> :::info <p class="text-center"> 此書面報告由戴永宸增修、校訂、排版、遷移至HackMD </p> ::: ## <p class="text-center"> 組別資訊 </p> 組內成員與分工組內成員與分工 | 系級與姓名 | 學號 | 組別組別 | | :--------: | :--------: | :--------: | | 資管一戴永宸 | A113610318 | 開發組、事務組| | 資管一邱堉齊 | A113610353 |開發組 | | 資管一洪苡毓 | A113610354 |設計組 | | 資設一林秀雅 | A113520367 | 設計組| | 資管一葉怡廷 | A113610342 | 設計組 | | 資管一張益塏 | A113610338 | 事務組| ## <p class="text-center"> 專案資訊 </p> #### <p class="text-center"> 簡短文字介紹 </p> 內容 你和你的隊友將針對一個自選的主題自行設計並實作一個資訊系統(或軟體,或程式,看你喜歡怎麼稱呼它)。你的系統可能含有一或多個程式。 - 你們能設定一個有趣又不失挑戰性的題目 - 你們能分析問題並且制定出好的系統架構和分工 - 你們能編寫正確、有效且容易維護的程式 - 你們能清楚生動地展示你們的想法和成果 各組必須自選主題並且實作一個資訊系統。雖然主題沒有任何限制,但理想上它應該適合被資訊化,並且可以在合理時間內被班上的大家理解。 - (最佳化)你可以針對一個困難的最佳化問題設計演算法,並且將演算法實作出來;這跟期中專案的型態蠻類似的。 - (資料分析與處理)若你手上有一家零售店的歷史交易記錄,你能做一個系統讓人們能輕鬆地查詢嗎?還是你能將大量資料有效地視覺化呢?又或者,你能否從這批資料中發現什麼令人意想不到的事實?你發現的事情對這個零售商能帶來什麼行銷或作業管理上的意涵?如果是臺鐵的列車到站時間記錄呢?如果是公共單車的借還記錄呢? - (遊戲)你可以寫個網路對戰的五子棋,或是介面精美、操控流暢的射擊遊戲。你可以使用<windows.h>、SFML之類的library來實現更好的介面設計。 ## <p class="text-center"> 專案簡介</p> #### <p class="text-center"> 作品名稱 </p> #### <p class="text-center"> 《IM TANKER》 </p> 遊戲介紹 《IM TANKER》是一款單機雙人對戰的坦克遊戲。 遊戲採五戰三勝制,每回合提供九張地圖給玩家自由選擇,首先獲得三勝者為最終贏家! 每張地圖都有不同的主題,其中有許多可以與玩家互動的物件:舉凡讓玩家生命值無意間減少的岩漿地塊、可推動或摧毀掉落道具的箱子。 因為地圖甚大,為了讓玩家有更好的遊戲體驗,兩玩家有各自的分割畫面。 玩家會面後,這時就是考驗操縱的熟練度了!除了高超的槍法外,還需要能巧妙地躲開對方的攻擊。若覺得實力懸殊的話,也可以藉由箱子掉落的各種道具增強能力。趕快找朋友來試一局吧! ### <p class="text-center"> 完整書面報告 </p> --------------- #### <p class="text-center"> 遊戲介紹 </p> - 起始畫面  #### <p class="text-center"> </p> - 遊戲說明  - 戰鬥畫面  ##### 小地圖 方便兩玩家了解目前的位置,小地圖位於螢幕正上方中間。 為了提高遊戲體驗,我們在小地圖上將玩家以較顯目的箭頭取代,使玩家們在作戰時能看清自己與對手的相對位置。 ##### 兩玩家分割視角 遊戲地圖甚大,為了要讓兩玩家能更清楚周遭環境,兩玩家各自的分割視野會隨著玩家的移動動態追蹤。 ##### 兩玩家生命值條 位於畫面左上角和右上角,分別為兩玩家的生命值。 為了讓玩家能一目瞭然,在畫面採生命條顯示,沒有實際數字。 ##### 玩家狀態燈 玩家狀態包含回血、子彈增強、速度提升。 吃到道具會後,相對應狀態燈會在固定時間內亮起,並在效果結束後熄燈。 ##### 玩家狀態燈 遊戲採回合制,首先達到三勝的玩家就是最終勝利者。因此,我們在上方顯示了三顆燈,亮著的燈數代表了玩家的勝場數。 - 戰鬥暫停畫面  ##### 繼續按鈕 按下後可繼續暫停的遊戲 ##### 倒退按鈕 按下後可以重新開始「當個回合」 ##### 退出按鈕 按下後將回到主畫面,遊戲紀錄不會保存 #### 回合勝利畫面  ##### 勝利者頭像 若回合結束,畫面中央會顯示贏家的放大頭像 ##### 繼續按鈕 按下後,進到下一回合的地圖選擇畫面 #### 最終勝利畫面  ##### 退出按鈕 按下後回到主畫面 ---- #### <p class="text-center"> Presentation 簡報 </p> [簡報連結](https://www.canva.com/design/DAE31uLpIHE/mNkswelTPy1-c7_Xoh8CXg/view?utm_content=DAE31uLpIHE&utm_campaign=designshare&utm_medium=link&utm_source=publishsharelink#1) ---- #### <p class="text-center">遊戲物件 </p> #### 玩家(坦克) ##### [ ](#text種類 "text種類") 種類 共有玩家一與玩家二,分別為藍色坦克與紅色坦克。 ##### [ ](#text樣式 "text樣式") 樣式 玩家一  玩家二  > 設計者:葉怡廷、林秀雅 ##### 操作方式 - 前進與後退 - 玩家一:W、S - 玩家二:上箭頭、下箭頭 - 車身旋轉 - 玩家一:A、D - 玩家二:左箭頭、右箭頭 - 發射砲彈 - 玩家一:V - 玩家二:空白鍵 ##### [ ](#text相關參數 "text相關參數") 相關參數相關參數 - 預設移動速度: .5f - 預設砲彈傷害:20.f - 最大血量:100.f - 換彈速度:1.f(秒) - 旋轉角速度:3.f - 補血道具每幀回復量:32.f 投射物(砲彈) 樣式 玩家一  玩家二  > 設計者:林秀雅、洪苡毓 ##### 生成方式 當玩家按下攻擊鍵,一枚相對應砲彈會產生在玩家砲管前,且面相玩家切線方,並等速飛行。 ##### [ ](#text相關參數41 "text相關參數41") 相關參數 - 預設飛行速度:.8f #### 磚地 ##### 種類 - 玩家一重生點 - 玩家二重生點 - 石頭地板 - 草地 - 木板(未出現在任一張地圖) ##### [ ](#text樣式44 "text樣式44") 樣式 - 玩家重生點  - 石頭地板 (由於此地磚有隨機生成材質之設計,共有9種,在此只展示其中一種)  - 草地 (由於此地磚有隨機生成材質之設計,共有62種,在此只展示其中一種)  #### 箱子 ##### [ ](#text樣式46 "text樣式46") 樣式  ##### [ ](#text互動方式 "text互動方式") 互動方式 - 玩家可推擠、碰撞 - 玩家可射擊箱子並擊毀 - 玩家可推擠箱子至岩漿中並摧毀之 - 玩家可拾取箱子破壞後掉落的隨機道具 ##### 道具掉落 箱子被破壞後會隨機產生至多三樣最少零樣的隨機種類道具,此設計利用了`Generator`類別,下部分系統設計會提到 ##### [ ](#text相關參數49 "text相關參數49") 相關參數 - 箱子血量:40 - 最大掉落物數量:3 #### 岩漿 ##### [ ](#text樣式51 "text樣式51") 樣式  ##### [ ](#text互動模式 "text互動模式") 互動模式 玩家若觸碰到此方塊會立即損血 ##### [ ](#text相關參數53 "text相關參數53") 相關參數相關參數 - 傷害:15 - 傷害間隔:3(秒) #### [ ](#text牆壁 "text牆壁") 牆壁 ##### [ ](#text樣式55 "text樣式55") 樣式 此遊戲物件也有隨機材質生成,共兩種   #### [ ](#text道具 "text道具") 道具 ##### [ ](#text種類57 "text種類57") #### ##### [ ](#text種類57 "text種類57") 種類 - 回血藥水 - 加速道具 - 子彈增強 ##### [ ](#text樣式58 "text樣式58") 樣式 回血藥水  加速道具  子彈增強  ##### [ ](#text互動模式59 "text互動模式59") 互動模式 玩家觸碰到道具會自動拾取,拾取後: - 回血藥水 - 在5秒內回復定量血量 - 加速道具 - 在7秒內加速 - 子彈增強 - 在7秒內砲彈變得更大、傷害更高 ##### [ ](#text相關參數60 "text相關參數60") 相關參數 - 子彈增強倍率:.8f - 速度提升倍率:.1f ------ ### 介面元素 #### [ ](#text封面戰車 "text封面戰車") 封面戰車 ##### [ ](#text種類63 "text種類63") 種類 封面坦克分為兩部分,如此可透過程式操控造成坦克砲管上下擺動效果 - 藍色戰車車身 - 紅色戰車車身 - 藍色戰車砲管 - 紅色戰車砲管 樣式     > 設計者:林秀雅、洪苡毓 #### 按鈕 ##### [ ](#text動畫 "text動畫") 動畫 按鈕在被使用者點擊後會有按壓動畫   > 設計者:[VOiD1 Gaming](https://itch.io/profile/void1gaming) ##### [ ](#textUX設計 "textUX設計") 設計UX設計 遊戲中的按鈕有貼心設計: 若玩家在點後立刻後悔,將鼠標移至按鈕外再方開,則不會觸發事件;唯有在按鈕上點擊並放開才會觸發事件。 #### [ ](#text玩家血條 "text玩家血條") 玩家血條 ##### [ ](#text樣式69 "text樣式69") 樣式   > 設計者:林秀雅、戴永宸 ##### 動畫 血條會追蹤相對應玩家血量比例,並依比例縮放長度。 #### [ ](#text玩家狀態燈71 "text玩家狀態燈71") 玩家狀態燈 ##### [ ](#text樣式72 "text樣式72") 樣式       ##### 動畫 玩家狀態燈會追蹤玩家狀態並以暗、亮表示未激活、被激活。 ### 系統設計 #### [ ](#text重點類別Class "text重點類別Class") 重點類別(Class) - `Game`,包裝整個遊戲的最外層類別 - `SceneManger`,掌管各種與場景相關事宜 - `MapManager`,讀取文字檔並轉換成二維整數陣列 - `Map`,讀取二維陣列並產生相對應的地圖與遊戲物件 - `Tile`,非互動性地磚 - `Box`,可推動、破壞並掉落道具的箱子 - `Lava`,可對玩家造成傷害的岩漿方塊 - `Wall`,玩家、投射物皆不可穿透的牆壁 - `Entity`,所有遊戲物件類別的母類別 - `Player`,遊戲玩家(坦克) - `Item`,道具(箱子掉落物) - `Projectile`,投射物(砲彈) - `Collider`,可加裝於欲有碰撞效果的遊戲類別中 - `SoundManager`,管理各種音效相關事宜 - `Generator`,有數個亂數相關函式 - `UIElement`,非互動性的使用者介面元素 - `Button`,可互動並有觸發事件能力的按鈕元素 #### [ ](#text其他開發細節 "text其他開發細節") 其他開發細節 ##### [ ](#text分檔 "text分檔") ==分檔== 這次專案原始碼非常龐大,因此分成數個檔案(hpp/cpp)並且交互include。在這極為複雜的include關係下,為了避免重新定義類別,使用#ifndef #define #endif等preprocessors。 ##### [ ](#text遊戲物件的更新 "text遊戲物件的更新") ==遊戲物件的更新== 因為執行此遊戲的電腦效能不盡相同,為了要讓每個用戶的體驗都可以在一個相同的標準。我們在每一次的遊戲跌代外執行Update這個函數,計算出上一次到此次的時間差(deltaTime)並依此作為更新遊戲物件程度的依據,因此在效能不同的電腦上執行也不會有太大差異。 ##### [ ](#text地圖的讀取與渲染 "text地圖的讀取與渲染") ==地圖的讀取與渲染== 初期,設計組在發想地圖的時候,為了更好的視覺化,採用excel的30*30格子,並填滿顏色來表示各種功能的地圖。另外,方便之後資料的轉換,因此除了在每個格子加上顏色,還有編上代號,例如:0-玩家一起始位置、1-玩家二起始位置、2-石頭地板、3-草地、4-岩漿、5-牆壁、6-箱子。 最後,將excel檔案轉成文字檔,再匯入MapManager,將文字檔讀取成二維陣列,後再傳入Map::loadMap生成相對應遊戲物件後渲染。 地圖中的幾種地磚,還有隨間產生材質的設計,例如草地、石頭地板等,因此每次打開同一張地圖都會長得不一樣。 - Excel地圖設計  ------- ### <p class="text-center"> 組內分工 </p> #### [ ](#text開發組 "text開發組") 開發組 系統設計與開發、介面設計。 - A113610318戴永宸 - A113610353邱堉齊 #### 設計組 遊戲素材蒐集與製作、遊戲模式設計。 - A113610354 洪苡毓 - A113520367 林秀雅 - A113610342 葉怡廷 #### [ ](#text事務組 "text事務組") 事務組 書面報告、開會場地安排。 - A113610338 張益塏 - A113610318 戴永宸
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up