自己菜鳥階段時在練習Java物件導向、設計模式時,所設計的題庫,此專案庫目前用來讓我的同學/學生 (欠調教的) 們提交程式碼來進行Review,欲參考OOP題目者可直接到Projects區觀看,題目皆(85%)擁有示範解答程式碼。ISSUE放的都是Code Review嘴砲。(物件導向設計學分兩階段→JAVA→設計模式)
24
stars
6
forks
source link
★ State Pattern:冒險者 #117
Open
Johnny850807 opened 4 years ago
難度:2
你要撰寫一個文字版的二維地圖冒險遊戲
假設你用二維陣列來呈現一個地圖,地圖上每一個物件都用一個符號表示, 並用一個特殊的符號呈現主角,以及主角面向的方位(例如↑→↓←), 這樣一來就能夠設計一個二維地圖冒險遊戲了!
主角及地圖物件
地圖上有諸多物件,主角碰到時可能會產生傷害或改變主角的狀態, 又或者地圖上會有怪物,主角可以進行攻擊來取得冒險的最終勝利。
主角的初始生命值為 300,主角每回合可以選一個方向移動一格或者選擇攻擊(只有這兩種選擇), 主角攻擊時,將會朝著他面向的方位,清除其前方所有怪物(意即當主角攻擊時,主角面前的所有怪物都會死亡,並從地圖中消失,但是攻擊不能穿越障礙物 👹 )。
1. 地圖上任兩個物件(如玩家與怪物或玩家與寶物) 可能因為某一方向另一方移動而彼此碰到,此時彼此並不會站在同一格地圖格上, 而是移動方站在原地,但啟動碰觸效果。
2. 主角可能會在冒險中,獲得取多種狀態(例如:中毒、無敵、加速...等等), 但每一次他獲得新狀態時,都會直接覆寫舊的狀態。
地圖的物件及各物件的表示方法為以下:
> 怪物只擁有1點生命值
寶物
每個寶物標誌(x)內都將隨機(依照機率)決定其內容物,以下:
狀態
每個狀態時效性結束後,如果其沒有特別說明,則狀態會回復成正常狀態。
遊戲流程及目標
每一回合將印出二維地圖(大小隨意設計,可以為 10 x 10),以及印出主角的生命值及其狀態(初始狀態為正常)。 並詢問主角要移動還是攻擊,移動的話要往哪個方向移動(上下左右)。
主角移動完之後,就換所有怪物們的回合。 印出每個怪物的詳細動作內容(移動或攻擊),並在每個怪物移動完之後在印出二維地圖並輪到主角回合。 如果寶物被取得,記得也要印出寶物的內容以及其特殊效果。
而遊戲目標是撐得越多回合越好!
至於寶物跟怪物,在各個回合都有機率在隨機地點生成,隨意設計即可!
軟體設計
此題目的設計非常明確就是必須套用狀態模式, 各個狀態實作必須從角色(玩家/怪物)身上的所有重要生命週期函數(回合開始 / 攻擊開始 / 移動開始...等等)中被委派, 所以各個不同狀態才有機會在特定事件中取得更改角色身上各種不同屬性的控制權, 或是在時效性到了之後將主角換回正常狀態。