組別:26
組員:112820022周佩樺、112590022陳駿逸
復刻遊戲:FE1 (Fire Emblem1) PC version
Fire Emblem: Shadow Dragon and the Blade of Light (FE1) 是 Fire Emblem 系列的第一部作品,屬於戰略角色扮演(SRPG)遊戲,由任天堂於1990年在FC紅白機上發行。
結合戰略遊戲的遊玩方式與角色扮演遊戲的劇情推演及人物成長,務求營造出昔日戰略遊戲中不存在的角色親近感。系列遊戲的每場戰鬥都在網格狀地圖上進行,戰鬥系統採用回合制,以我方、敵方、友方的排序進行回合交替,玩家可在故事主線和支線任務中控制一定數量角色。每個角色都有特定職業,它決定了角色的能力值並影響他們的攻擊範圍、移動距離等。部分職業具備獨有的先天技能,而角色的能力值及其升幅也各有不同。
112820022周佩樺:素材處理、資訊UI製作、升級UI製作、測試
112590022陳駿逸:物件建置、武器管理、流程處理
NTUT_OOPL_第26組_FireEmblem1_介紹影片
Marth是主角,遊戲目標是讓Marth到達城堡完成兩個關卡,而一旦HP歸零則敗北。 每位角色有職業、基礎數值、成長率、4個背包欄位,角色可以選擇背包裡的其中一個欄位作為手持欄位,而每個武器有基礎數值、攻擊距離。考慮大部分的玩家行為都是根據選擇來達成目的,因此之後的說明皆採用以下線性的狀態與流程來撰寫:
-
[⬆️⬇️➡️⬅️]:控制選擇框移動到對想操作的角色座標
-
[ENTER↩️]:選取該角色,該角色進入走路狀態
- 藍色的tips是可行走的範圍(職業地形成本對應表)
- 紅色的tips是可攻擊最大範圍(根據角色背包所有武器)
-
[⬆️⬇️➡️⬅️]:控制選擇框移動到想讓角色移動到的座標(受限在藍色tips的範圍中)
-
該角色移動到該座標(紅色tips表示當前可攻擊範圍)
-
顯示當前角色可以做的所有動作(ActUI)
-
[⬆️⬇️]:操控選擇點移動
-
5-1. [ENTER↩️] Next 選項:Marth到該關卡的城堡後出現,選擇進入下一關
-
5-2. [ENTER↩️] Visit 選項:到特定村莊拜訪獲得錢錢、拜訪獲得Wrys角色
-
5-3. [ENTER↩️] Talk 選項:當Marth遇到敵人Darros、Caeda遇到敵人Castor可以將其變成我方角色
-
5-4. [ENTER↩️] Armory 選項:當角色在商店時出現,選擇進入商店頁面(ShopUI)
- [⬆️⬇️]:操控選擇點移動(可買的當前角色職業武器,若無則不會出現選擇點)
- [ENTER↩️]:購買物品
- [BACKSPACE↪️]:離開商店頁面並結束該回合該角色的行動
-
5-5. [ENTER↩️] Attack 選項:當敵人在角色攻擊範圍內時出現,選擇進行敵人的選取
- [⬆️⬇️➡️⬅️]:控制選擇框到要攻擊的敵人
- 5-5-1. [ENTER↩️]:進入武器頁面(WeaponUI)
- [⬆️⬇️]:操控選擇點移動
- [ENTER↩️]:選取手持的攻擊武器
-
5-6. [ENTER↩️] Target 選項:當隊友在角色有效範圍內時出現,選擇進行隊友的選取
- 5-6-1. [ENTER↩️]:進入武器頁面(WeaponUI)
- [⬆️⬇️]:操控選擇點移動
- [ENTER↩️]:選取手持的Heal
- 5-6-1. [ENTER↩️]:進入武器頁面(WeaponUI)
-
5-7. [ENTER↩️] Item 選項:進入背包頁面(ItemUI)
- [⬆️⬇️]:操控選擇點移動
- [ENTER↩️]:選取手持物品並回到ActUI
- [SPACE⏹️]:捨棄物品
-
5-8. [ENTER↩️] Wait 選項:結束該回合該角色的行動
-
-
當所有我方角色移動完後換敵人回合行動
-
敵人優先攻擊Marth或是血量較少者
[F1] : 顯示/隱藏 地形資訊(TileInfoUI)
[F2] : 顯示/隱藏 角色詳情資訊(CharacterInfoFullUI)
[F3] : 顯示/隱藏 角色武器資訊(ItemInfoUI),[Q]可以換下一把武器
[F4] : 顯示/隱藏 角色移動提示(Tips in PlayerManager)
[0️⃣]:結束玩家移動回合
[1️⃣]:開/關 敵人的移動(作弊鍵)
攻擊規則:
攻擊角色的武器如果對被攻擊角色的職業克制則享有三倍傷害,攻擊角色有機率觸發爆擊,被攻擊的角色有機率觸發閃避。假設A角色先攻擊B角色,接著B角色可以根據手持的武器進行反擊,若A的行動速度(速度值-武器重量)比B快,A可獲得一次追擊,反之,若B的行動速度比A快,B可獲得一次追擊。
經驗與升級規則:
角色擊殺敵方角色後會獲得對方身上的Exp經驗值,每獲得100Exp升一等Lv等級,每升一等每個基礎數值會根據該數值的成長機率上升1點。e.g.當Marth等級提升時的HP上限+1的機率是90%、Str+1的機率是50%......以此類推。
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
- MapManager -> 管理有關地圖上的所有Tile(磚塊)
- UIManager -> 管理所有視窗UI
- PlayerManager -> 管理所有我方角色Character
- EnemyManager -> 管理所有敵方角色Character
- Camera -> 管理所有顯示到render的物件
- Selection -> 玩家操作的選擇框,包含狀態機
- ProcessControl -> 用來整理狀態機線性流程的程式
根據SelectionStatus的狀態大概操作:
-
Normal to Moving:
- 紀錄選擇的角色
- 角色更改成行走狀態
- 對比"角色移動花費列表"使用BFS廣度優先搜尋尋找可行走範圍
- 由可行走範圍和角色所有武器的觸及範圍BFS尋找攻擊範圍
- 顯示範圍提示Tips(由半透明的Tile組成,管理在PlayerManager)
-
Moving to Walking:
- 使用Dijkstra計算最短距離放到移動堆疊裡
- 一旦角色堆疊裡有座標,將座標距離分段,每幀移動一段
- 到堆疊座標即pop,一旦堆疊變成空的即觸發步驟3
-
SUI(ActUI繼承SelectedUI):
- 以角色當前座標為原點BFS尋找攻擊範圍
- 判斷角色是否觸發選項
- 根據選項
- 上下左右移動鍵以最短可移動座標選取
- AttackTargeting/Targeting/ItemUI/ShopUI
-
AttackTargeting/Targeting to WeaponUI/HUI
- 選擇判斷武器距離等於敵人距離的武器
- 將武器設定成手持
-
WeaponUI/HUI to BattleUI
- 每幀更新動畫與邏輯操作
-
BattleUI to Normal
- 關掉BattleUI
- 把角色設定成Waiting
-
ItemUI to Normal
- 設定當前手持武器
- 刪除武器
-
ShopUI to Normal
- 配合可使用列表限制可購買的選項
- 選擇後扣錢並替代nill欄位
-
EnemyMoving
- 根據敵人列表移動
- 角色更改成行走狀態
- 對比"角色移動花費列表"使用BFS廣度優先搜尋尋找可行走範圍
- 由可行走範圍和角色所有武器的觸及範圍BFS尋找攻擊範圍
- 若攻擊與移動範圍內有我方角色,挑選Marth或是血量最低者攻擊
- 若無我方角色,使用A*尋找與Marth的最短成本路徑,根據路徑和可移動範圍重疊位置挑最遠的點進行移動
-
起初在建構Tile作為地圖的本體時,自作聰明想說讓動畫Util::Animation一個物件就好,其他都指向同個目標想藉此減少每個物件都需要再相同動畫的Drawable物件,解省記憶體,但實作後才發現,每次不斷觸發同一個動畫物件導致每個Tile的顯示動畫幀數亂跳聖致有些忽快忽慢,因此最後採用了先讀黨建立基本的母體Tile,再透過複製建構子把完整的地圖一格一格實現,回歸了原本的作法。
-
原本規劃武器時少了考慮到武器是有使用限制的,因此在撰寫程式時,常常會遇到許多空指標問題等一系列不良反應。
-
敵人一開始在摸魚,因為只選擇了敵人與Marth之間的距離做行動,在第一關海盜們會直接撞山,然後來回上下移動因為對他們來說已經到了移動極限,因此最後又用了A*尋找最短路徑作為移動參考。
| 項次 | 項目 | 完成 |
|---|---|---|
| 1 | 這不是飯粒、 | V |
| 2 | 完成專案權限改為 public | V |
| 3 | 具有 debug mode 的功能 | V |
| 4 | 解決專案上所有 Memory Leak 的問題 | V |
| 5 | 報告中沒有任何錯字,以及沒有任何一項遺漏 | V |
| 6 | 報告至少保持基本的美感,人類可讀 | V |
| 7 | 達成助教要求,兩張地圖 | V |
112590022 陳駿逸
第一次自己摸索設計一個完整的架構寫遊戲,一開始時間比較充裕時想試試許多東西像是一開始遇到的動畫問題或是預想manager之後從外對接大概會需要到那些功能,一開始時很開心,原本想要的功能前面自己已經接好了,只需要引用就好,但隨著其中的到來,時間越來越不夠用,許多東西都是快速至上,能趕快處理完就直接push了,讓我深刻體驗到責任制專案中自我時間規劃的重要性。
112820022 周佩樺
這次的OOPL專案是我第一次嘗試復刻一款完整的戰略角色扮演遊戲,在選擇復刻FE1作為主題後,我充分的意識到理想是美好的,現實是骨感的,在製作專案的期間我們無時無刻都在後悔選擇這款遊戲。
我主要負責素材處理、資訊UI製作、升級UI設計以及遊戲bug測試,這些任務讓我深入思考整體UI應該如何與遊戲邏輯整合,資訊UI等介面除了要能夠正確呈現角色資訊與裝備內容,還要能隨時與當前選擇的角色同步更新,這對我在事件驅動與狀態管理的理解上是一大收穫。
升級UI的設計除了顯示升級提示外,簡單明瞭地呈現出數值變化對玩家來說才會有實質的升級感。
此外在開發的過程中,與組員不斷溝通細節部分、確認流程以及測試與debug也提升了我在團隊合作與版本整合方面的能力,尤其是測試找出bug的部分,除了要模擬初次遊玩的使用者可能會做出的行動,還要嘗試觸發較少見的例外判斷,花了非常多的時間與心力在保證遊戲在各種情況下都能正常的運行。
這次專題不只是讓我把所學的程式語言知識應用出來,更讓我在遊戲開發的流程與架構設計上有了非常實際的體驗,希望未來仍有機會將這個專案擴充得更加完整,甚至挑戰更多系統的實作。
112590022 - 60 %
112820022 - 40 %








