14881 - Walk Through The Map (Count)   

Description

給定一個 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(其中包含四個移動方向)

  • U: 代表向上移動
  • R: 代表向右移動
  • D: 代表向下移動
  • L: 代表向左移動

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

#include "function.h"
 
void mapMove(char map[5][5], enum Move *movement)
 
{
 
  // TO DO
 
}
 

Input

輸入符合以下格式

map

movement

 

Note:

  1. map代表地圖,為5*5的陣列,其中 ’x ’為人的所在位置,’#’為障礙物
  2. movement為一個由enum Move組成的陣列,長度為10(陣列中含10個enum元素)
  3. main.c 已處理輸入,不需自行處理

(詳見Sample Input)

 

Output

輸出符合以下格式:

移動距離在地圖內,且未碰到障礙物:(印出地圖以及人移動後的位置)

--#--

-----

--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:

  1. 輸出的最後必須要有一個換行符號 ('\n'),地圖的字元間沒有空格
  2. X, Y, Z為遇到障礙物的步數,步數從1開始計算到10;N為碰到障礙物的次數
  3. 輸出部分需在mapMove() 中實作
 

Sample Input  Download

Sample Output  Download

Partial Judge Code

14881.c

Partial Judge Header

14881.h

Tags




Discuss