給定一個 5×5 的二維陣列 map 與一個長度為 10 的 enum 型別陣列。map 中的 'x' 代表玩家的位置,字元 '#' 代表障礙物,enum型別陣列中movement的每個元素代表接下來的移動方向。玩家將依序執行這 10 個移動指令,並更新最終位置,移動方向遇到障礙物時則不移動至該方向。
此外,在遇到障礙物時需輸出Hit obstacle at step X!(X為在第幾步遇到障礙物),遇到幾次障礙物就輸出幾次,並在最後輸出完地圖後,印出共遇到障礙物幾次,即Obstacle hits: N(N為撞到的次數)。
若結果為在界外,也請輸出在第幾步開始在界外,即Out of Boundary at step Z!(Z為開始在界外之步數)。
給定主要執行程式main.c (題號.c)、以及Header檔function.h (題號.h);請試著完成Header檔中未實現的函式:mapMove()
function.h:
enum Move(其中包含四個移動方向)
Methods:
-void mapMove(char map[5][5], enum Move *movement) 傳入 5x5 的二維陣列 map 與指向 enum 陣列的指標。函式需找出玩家('x')的初始位置並依序執行 10 步移動指令:
-越界判斷:若移動後超出地圖範圍,請立即輸出 "Out of Boundary at step Z!"(Z 為當前步數,從 1 開始計算)並結束函式。
-障礙物判斷:若目標位置為障礙物('#'),則停留在原地,並輸出 "Hit obstacle at step X!"(X 為當前步數),同時累計撞牆次數。
-正常移動:若無上述情況,則更新玩家位置。
-最終輸出:若順利完成 10 步(未越界),請先印出最終的地圖狀態(不用空格分隔),最後換行印出總撞牆次數 "Obstacle hits: N"
hint:
可以透過movement++來取得enum陣列中的下一個元素
function.c
輸入符合以下格式
map
movement
Note:
(詳見Sample Input)
輸出符合以下格式:
移動距離在地圖內,且未碰到障礙物:(印出地圖以及人移動後的位置)
--#--
-----
--x--
---#-
-----
Obstacle hits: 0
若遇到障礙物:
Hit obstacle at step X!
...
Hit obstacle at step Y!
-----
-----
-x-#-
-----
-----
Obstacle hits: N
移動距離超過地圖:
Out of Boundary at step Z!
若遇到障礙物又超過地圖:
Hit obstacle at step X!
...
Hit obstacle at step Y!
Out of Boundary at step Z!
Note: