遊戲版本:1.1
在回合開始時,可以決定發球位置與方向。如果沒有在 150 影格內發球,球會從平台目前位置隨機往左或往右發球。球速從 7 開始,每 100 影格增加 1。如果球速超過 40 卻還沒分出勝負的話,該回合為平手。
在不同的難度中加入兩種機制。一個是切球,球的 x 方向速度會因為板子接球時的移動而改變;另一個是在場地中央會有一個移動的障礙物。
- 手動模式:
python MLGame.py -m pingpong <difficulty> [game_over_score]
- 將球發往左邊/右邊:1P -
.
、/
,2P -Q
、E
- 移動板子:1P - 左右方向鍵,2P -
A
、D
- 將球發往左邊/右邊:1P -
- 機器學習模式:
python MLGame.py -i ml_play_template.py pingpong <difficulty> [game_over_score]
difficulty
:遊戲難度EASY
:簡單的乒乓球遊戲NORMAL
:加入切球機制HARD
:加入切球機制與障礙物
game_over_score
:[選填] 指定遊戲結束的分數。當任一方得到指定的分數時,就結束遊戲。預設是 3,但如果啟動遊戲時有指定-1
選項,則結束分數會是 1。
與打磚塊遊戲一樣
500 * 200 像素。1P 在下半部,2P 在上半部
- 5 * 5 像素大小的綠色正方形
- 每場遊戲開始時,都是由 1P 先發球,之後每個回合輪流發球
- 球由板子的位置發出,可以選擇往左或往右發球。如果沒有在 150 影格內發球,則會自動往隨機一個方向發球
- 初始球速是每個影格 (±7, ±7),發球後每 100 影格增加 1
- 40 * 30 的矩形,1P 是紅色的,2P 是藍色的
- 板子移動速度是每個影格 (±5, 0)
- 1P 板子的初始位置在 (80, 420),2P 則在 (80, 50)
在板子接球時,球的 x 方向速度會因為板子的移動而改變:
- 如果板子與球往同一個方向移動時,球的 x 方向速度會增加 3 (只增加一次)
- 如果板子沒有移動,則求的 x 方向速度會恢復為目前的基礎速度
- 如果板子與球往相反方向移動時,球會被打回原來過來的方向,其 x 方向速度恢復為目前的基礎速度
切球機制加入在 NORMAL
與 HARD
難度中。
- 30 * 20 像素的矩形
- x 初始位置在 0 到 180 之間,每 20 為一單位隨機決定,y 初始位置固定在 240,移動速度為每影格 (±5, 0)
- 障礙物會往復移動,初始移動方向是隨機決定的
- 障礙物不會切球,球撞到障礙物會保持球的速度
障礙物加入在 HARD
難度中。
程式範例在 ml/ml_play_template.py
。
side
: 字串。其值只會是"1P"
或"2P"
,代表這個程式被哪一邊使用。
由遊戲端發送的字典物件,同時也是存到紀錄檔的物件。
{
'frame': 42,
'status': 'GAME_ALIVE',
'ball': (189, 128),
'ball_speed': (7, -7),
'platform_1P': (0, 420),
'platform_2P': (0, 50),
'blocker': (50, 240)
}
以下是該字典物件的鍵值對應:
"frame"
:整數。紀錄的是第幾影格的場景資訊"status"
:字串。目前的遊戲狀態,會是以下的值其中之一:"GAME_ALIVE"
:遊戲正在進行中"GAME_1P_WIN"
:這回合 1P 獲勝"GAME_2P_WIN"
:這回合 2P 獲勝"GAME_DRAW"
:這回合平手
"ball"
:(x, y)
tuple。球的位置。"ball_speed"
:(x, y)
tuple。目前的球速。"platform_1P"
:(x, y)
tuple。1P 板子的位置。"platform_2P"
:(x, y)
tuple。2P 板子的位置。"blocker"
:(x, y)
tuple。障礙物的位置。如果選擇的難度不是HARD
,則其值為None
。
傳給遊戲端的字串,用來控制板子的指令。
'MOVE_RIGHT'
以下是可用的指令:
"SERVE_TO_LEFT"
:將球發向左邊"SERVE_TO_RIGHT"
:將球發向右邊"MOVE_LEFT"
:將板子往左移"MOVE_RIGHT"
:將板子往右移"NONE"
:無動作
在紀錄檔中,機器學習端的名字 1P 為 "ml_1P"
、2P 為 "ml_2P"
。
乒乓球是雙人遊戲,所以在啟動機器學習模式時,可以利用 -i <script_for_1P> -i <script_for_2P>
指定兩個不同的玩家程式。如果只有指定一個玩家程式,則兩邊都會使用同一個程式。
而在遊戲中有提供 ml_play_manual.py
這個程式,它會建立一個手把,讓玩家可以在機器學習模式中手動與另一個程式對玩。使用流程:
- 使用
python MLGame.py -i ml_play_template.py -i ml_play_manual.py pingpong <difficulty>
啟動遊戲。會看到有兩個視窗,其中一個就是手把。終端機會輸出 "Invisible joystick is used. Press Enter to start the 2P ml process." 的訊息。
- 將遊戲手把的視窗拉到一旁,並且讓它是目標視窗 (也就是說視窗的標題不是灰色的)。
- 按 Enter 鍵讓手把也發出準備指令以開始遊戲,使用左右方向鍵來控制板子移動。
與打磚塊遊戲的機制相同