- 請將你的程式碼放置於 player 資料夾中,並請命名為 player.cpp,請確保你的 player 資料中必須包含這隻檔案。
- sample input 可以採用 sample 資料夾中的範例輸入
- 欲使用 judge,可以於終端環境中輸入 make judge1 即可。judge 先執行玩家當 A 做先手玩家,再執行玩家當 B 做後手玩家。判斷完畢後將於目錄底下出現 move_player_be_A.log 和 move_player_be_B.log。log 中為 A、B 玩家的移動紀錄,以及最後兩行輸出競賽結果
- judge 僅能在 linux 平台使用,包含 ubuntu, mac 等機器,並請確保您的環境安裝有 python3 。如遇到 judge 無法使用,請先嘗試使用 make clean ,若仍然無法使用再與助教聯繫。
- judge 各機器人請分別使用 make judge1, make judge2 ... 等指令
有一個特別尋寶遊戲,在這個遊戲中只會有兩尋寶人,他們會在一張
$M \times N$ 完全對稱的地圖上,各自由左上角及右下角出發,大戰 1000 個回合後,看誰能蒐集到最多的寶物。在這個遊戲中,你將扮演兩尋寶人的其中一人,善用 CP2 所學習到技巧,盡量蒐集越多的寶物。
- Target: 遊戲結束後,兩尋寶人會有各自的寶物計分,寶物計分較高者勝出。亦即每個玩家需要盡可能的提高寶物計分
-
移動
- 給定某個盤面,並且指定玩家扮演的角色(A或B),請你的程式決定該角色應該移動到哪一個位置。
- 每一回合,先手玩家先行移動一步(一格),後手玩家才能夠移動一步(一格)
- 每次移動時,玩家僅能從目前位置選擇,向上、向右、向下、向左選擇一個位置前進,不可選擇停留於原地。
-
回合
- 每一回合,玩家可以移動一步。亦即先手玩家會先一動一步(一格),後手玩家才能夠移動一步(一格)
- 每一回合的決定移動方向的時間為 1 秒,超過時間限制的玩家將直接輸掉遊戲
- 回合上限為 1000 次,超過 1000 回合後(即第 1001 個回合)遊戲結束。
- 若地圖物件已經全部拾取完畢,遊戲將提早結束。
-
地圖物件
- 寶物:寶物不可重複拾取,一經撿拾(走到該寶物座標上方)則物件消失。種類共分五種,地雷、蘑菇、毒蘑菇、無敵星星、無敵毒星星,效果如下
- 地雷(b):接觸玩家將會因為受傷導致傷停3回合
- 蘑菇(m):接觸玩家寶物計分 +1
- 毒蘑菇(n):接觸玩家寶物計分 -1
- 無敵星星(s):接觸玩家寶物計分 *2
- 無敵毒星星(t):接觸玩家寶物計分 /2 (小數點後無條件捨去)
- 牆壁(x):玩家無法穿越或移動的對象
- 寶物:寶物不可重複拾取,一經撿拾(走到該寶物座標上方)則物件消失。種類共分五種,地雷、蘑菇、毒蘑菇、無敵星星、無敵毒星星,效果如下
-
不合法的操作
- 走出地圖範圍的玩家將被判定為輸掉遊戲。
- 走入或穿越牆壁的玩家將被判定為輸掉遊戲。
- 移動不符合向上、向右、向下、向左的操作,將被判定為輸掉遊戲。
- 玩家為不可穿越的對象,若玩家移動的過程穿越對手玩家,則移動的玩家將被判定為輸掉遊戲。
- 輸入說明:
- 輸入第一行為一整數 T,表示現在為第 T 回合,並保證 0 < T < 1001。
- 輸入第二行為兩個整數 $ 0 < M, N \le 20$,代表這張地圖的大小 M * N。
- 接著 M 行,每行將告訴你地圖上的所有物件,物件與物件之間以空白隔開,物件種類如下:
- 'A' 表示 A 玩家目前所在的位置
- 'B' 表示 B 玩家目前所在的位置
- '.' 表示目前這格上面沒有任何物件
- 'b' 表示目前這格上的物件為地雷
- 'm' 表示目前這格上的物件為蘑菇
- 'n' 表示目前這格上的物件為毒蘑菇
- 's' 表示目前這格上的物件為無敵星星
- 't' 表示目前這格上的物件為無敵毒星星
- 'x' 表示目前這格上的物件為牆壁
- 隨後兩行依序為兩整數 P, Q ,分別表示 A 目前的得分(P)以及 B 目前的得分(Q)。
- 最後一行為一字元 C ,他將告訴你目前操控的玩家是誰。
1
8 8
A . t m x s x s
. x x m n m x m
m m b x m t x m
x x . m m . n m
m n . m m . x x
m x t m x b m m
m x m n m x x .
s x s x m t . B
0
0
A
1
8 8
A . t m x s x s
. x x m n m x m
m m b x m t x m
x x . m m . n m
m n . m m . x x
m x t m x b m m
m x m n m x x .
s x s x m t . B
0
0
B
根據你得到的 Input,請你決定你操控的玩家將要移動的方向,方向為以下 4 種其中之一:
- "UP": 表示你期望將你操控的玩家向上移動,並確保這個移動是合法的
- "DOWN": 表示你期望將你操控的玩家向下移動,並確保這個移動是合法的
- "LEFT": 表示你期望將你操控的玩家向左移動,並確保這個移動是合法的
- "RIGHT": 表示你期望將你操控的玩家向右移動,並確保這個移動是合法的
UP
DOWN
LEFT
RIGHT
- 與助教的機器人對戰 (70%): 將陸續提供一、二、三號等三隻機器人,請定時 pull 新版的本 github repository 取得。
- 戰勝一隻機器人: 30 分
- 戰勝兩隻機器人: 50 分
- 戰勝三隻機器人: 70 分
- 與同學的機器人對戰(30%): 所有修課同學的機器人將進行兩兩對戰,再依勝率 * 30 決定分數。即戰勝所有的同學的機器人可以得到 30 分,無法戰勝任何同學則得 0 分。
請至 Moodle 正課頁面的上傳區上傳以下兩個檔案
- 程式原始碼,以
學號.cpp
命名 - 報告,PDF 檔,不超過四頁(A4),以
學號.pdf
命名,包含以下內容- 解法、策略
- 特別考慮的情況、因素
- 與三隻助教提供之機器人對戰的結果
- 其他心得、建議
時間 | 事項 |
---|---|
June 2 | 期末專題公布(含第一號機器人) |
June 9 | 第二號機器人釋出(請 pull 本 git repository 取得) |
June 15/16 | 線上約談 |
June 16 | 第三號機器人釋出(請 pull 本 git repository 取得) |
June 23 23:59:59 | 程式、報告上傳截止 |
June 30 | 對戰結果公布 |