以 MLGame.py 啟動遊戲 - LanKuDot/MLGame GitHub Wiki
MLGame.py
是整個遊戲的啟動檔案,玩家可以指定啟動的遊戲與執行參數來執行遊戲。使用 python MLGame.py -h
指令可以查看使用方法與可用的參數。
執行 MLGame.py
的指令格式如下:
python MLGame.py [options] <game_name> [game_params]
options
可以指定功能參數或遊戲的執行參數。game_name
指定要執行的遊戲,名稱與 games
資料夾中的遊戲資料夾名稱一樣,而 game_params
則是要傳給遊戲的參數。關於執行參數詳見執行參數,而遊戲參數的設置詳見遊戲設置。
MLGame 一開始會解析參數是否有效,也會讀取遊戲設定來解析遊戲參數。接著依照指定的執行模式執行遊戲,在手動模式中是直接執行遊戲,而在機器學習模式中會先檢查指定的玩家程式是否存在,接著才會配置資源給遊戲端與機器學習端,以執行遊戲。遊戲的詳細執行流程請見手動模式與機器學習模式。
下圖呈現詳細的 MLGame 程式架構:
-
MLGame.py
:程式進入點,會直接將執行權交給execution.py
-
execution.py
檢查與解析輸入的參數,並決定要執行什麼模式 -
Executor
系列:MLGame 執行的核心,用來控制遊戲與玩家程式的執行流程。在啟動時指定的參數,會影響Executor
的執行方式 -
ProcessManager
:配置與管理要執行的 process,並為 process 之間設置溝通管道 -
CommManager
系列:負責遊戲端與機器學習端之間的溝通,ProcessManager
會產生溝通管道供CommManager
使用 -
class Game
與class MLPlay
:由遊戲開發者與玩家提供的類別,提供指定的函式供Executor
取得所需資料或是傳入資料執行 -
Recorder
:紀錄遊戲過程並產生紀錄檔。無論什麼模式,遊戲的Executor
會把收到的場景資訊與遊戲指令傳給Recorder
MLGame 結束執行有三種情況:
- 遊戲結束:以
-1/--one-shot
模式執行,或是遊戲要求結束而非重新開始時; - 關閉視窗:玩家按下視窗的 "X" 按鈕或是 "ESC" 鍵。MLGame 以
pygame
偵測這些事件; - 發生錯誤:錯誤會回傳對應的錯誤代碼。
當有任何遊戲或是機器學習端出現錯誤時,MLGame 會停止執行,並印出錯誤原因,同時也會回傳錯誤代碼(可用 echo $?
來查看)來標示錯誤類型。
-
0
:正常結束。 -
1
:未處理的錯誤,也就是 MLGame 沒預料到的錯誤。 -
2
:指令錯誤。在啟動 MLGame 的指令中有錯誤。 -
3
:遊戲執行錯誤。遊戲或是機器學習端發生錯誤。 -
4
:編譯錯誤。在編譯非 python 的玩家程式時,發生的錯誤。