Johnny850807 / Coding-GYM

自己菜鳥階段時在練習Java物件導向、設計模式時,所設計的題庫,此專案庫目前用來讓我的同學/學生 (欠調教的) 們提交程式碼來進行Review,欲參考OOP題目者可直接到Projects區觀看,題目皆(85%)擁有示範解答程式碼。ISSUE放的都是Code Review嘴砲。(物件導向設計學分兩階段→JAVA→設計模式)
24 stars 6 forks source link

★ State Pattern:冒險者 #117

Open Johnny850807 opened 4 years ago

Johnny850807 commented 4 years ago

難度:2

你要撰寫一個文字版的二維地圖冒險遊戲

假設你用二維陣列來呈現一個地圖,地圖上每一個物件都用一個符號表示, 並用一個特殊的符號呈現主角,以及主角面向的方位(例如↑→↓←), 這樣一來就能夠設計一個二維地圖冒險遊戲了!

主角及地圖物件

地圖上有諸多物件,主角碰到時可能會產生傷害或改變主角的狀態, 又或者地圖上會有怪物,主角可以進行攻擊來取得冒險的最終勝利

主角的初始生命值為 300主角每回合可以選一個方向移動一格或者選擇攻擊(只有這兩種選擇), 主角攻擊時,將會朝著他面向的方位,清除其前方所有怪物(意即當主角攻擊時,主角面前的所有怪物都會死亡,並從地圖中消失,但是攻擊不能穿越障礙物 👹 )。

1. 地圖上任兩個物件(如玩家與怪物或玩家與寶物) 可能因為某一方向另一方移動而彼此碰到,此時彼此並不會站在同一格地圖格上, 而是移動方站在原地,但啟動碰觸效果。

2. 主角可能會在冒險中,獲得取多種狀態(例如:中毒、無敵、加速...等等), 但每一次他獲得新狀態時,都會直接覆寫舊的狀態。

地圖的物件及各物件的表示方法為以下:

名稱 符號 說明
主角 ↑→↓← 主角具有四個面向方位:上右下左,其對應的符號即為↑→↓←
障礙物 當主角移動時,如果移動方向前一格正好具有障礙物存在,則主角將留在原地。
寶物標誌 寶物裡將會存在各種不同內容,當主角或怪物碰到寶物時,寶物會從地圖上消失而主角/怪物將會依據寶物的不同內容而得到不同狀態。(請看以下寶物章節)
怪物 M 怪物每回合會往一個方向移動,當主角位於怪物的攻擊範圍內(預設狀態時,此範圍為怪物的上下左右各一格)時,怪物會原地不動地攻擊主角,主角的生命會減少50,並且主角獲得無敵狀態(請看以下狀態章節)
> 怪物只擁有1點生命值

寶物

每個寶物標誌(x)內都將隨機(依照機率)決定其內容物,以下:

名稱 機率 作用
無敵星星 10% 獲得無敵狀態
毒藥 25% 獲得中毒狀態
加速藥水 20% 獲得加速狀態
補血罐 15% 獲得恢復狀態
惡魔果實 10% 獲得混亂狀態
王者之印 10% 獲得蓄力狀態
任意門 10% 獲得瞬身狀態

狀態

每個狀態時效性結束後,如果其沒有特別說明,則狀態會回復成正常狀態。

名稱 時效性 說明
無敵 2回合 受到攻擊時並不會有任何生命損失
中毒 3回合 每回合失去15點生命值
加速 3回合 每回合可以進行兩次動作,若在期間遭受攻擊則立刻恢復至正常狀態
恢復 5回合 每回合將恢復30點生命值,直到滿血,滿血後立刻恢復至正常狀態
混亂 3回合 每回合隨機取得以下其中一種效果:1. 只能進行 上下移動 2. 只能進行 左右移動
蓄力 2回合 兩回合後進入爆發狀態,若在期間遭受攻擊則立刻恢復至正常狀態
爆發 3回合 能夠進行全場攻擊,且攻擊力為50,三回合過後取得瞬身狀態
瞬身 1回合 一回合後主角的位置將被隨機移動至任一空地

遊戲流程及目標

每一回合將印出二維地圖(大小隨意設計,可以為 10 x 10),以及印出主角的生命值及其狀態(初始狀態為正常)。 並詢問主角要移動還是攻擊,移動的話要往哪個方向移動(上下左右)。

主角移動完之後,就換所有怪物們的回合。 印出每個怪物的詳細動作內容(移動或攻擊),並在每個怪物移動完之後在印出二維地圖並輪到主角回合。 如果寶物被取得,記得也要印出寶物的內容以及其特殊效果。

而遊戲目標是撐得越多回合越好!

至於寶物跟怪物,在各個回合都有機率在隨機地點生成,隨意設計即可!

軟體設計

此題目的設計非常明確就是必須套用狀態模式, 各個狀態實作必須從角色(玩家/怪物)身上的所有重要生命週期函數(回合開始 / 攻擊開始 / 移動開始...等等)中被委派, 所以各個不同狀態才有機會在特定事件中取得更改角色身上各種不同屬性的控制權, 或是在時效性到了之後將主角換回正常狀態。