以 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 則是要傳給遊戲的參數。關於執行參數詳見執行參數,而遊戲參數的設置詳見遊戲設置

啟動流程

Imgur

MLGame 一開始會解析參數是否有效,也會讀取遊戲設定來解析遊戲參數。接著依照指定的執行模式執行遊戲,在手動模式中是直接執行遊戲,而在機器學習模式中會先檢查指定的玩家程式是否存在,接著才會配置資源給遊戲端與機器學習端,以執行遊戲。遊戲的詳細執行流程請見手動模式機器學習模式

詳細程式架構

下圖呈現詳細的 MLGame 程式架構:

Imgur

  • MLGame.py:程式進入點,會直接將執行權交給 execution.py
  • execution.py 檢查與解析輸入的參數,並決定要執行什麼模式
  • Executor 系列:MLGame 執行的核心,用來控制遊戲與玩家程式的執行流程。在啟動時指定的參數,會影響 Executor 的執行方式
  • ProcessManager:配置與管理要執行的 process,並為 process 之間設置溝通管道
  • CommManager 系列:負責遊戲端與機器學習端之間的溝通,ProcessManager 會產生溝通管道供 CommManager 使用
  • class Gameclass MLPlay:由遊戲開發者與玩家提供的類別,提供指定的函式供 Executor 取得所需資料或是傳入資料執行
  • Recorder:紀錄遊戲過程並產生紀錄檔。無論什麼模式,遊戲的 Executor 會把收到的場景資訊與遊戲指令傳給 Recorder

結束執行

MLGame 結束執行有三種情況:

  • 遊戲結束:以 -1/--one-shot 模式執行,或是遊戲要求結束而非重新開始時;
  • 關閉視窗:玩家按下視窗的 "X" 按鈕或是 "ESC" 鍵。MLGame 以 pygame 偵測這些事件;
  • 發生錯誤:錯誤會回傳對應的錯誤代碼。

錯誤代碼

當有任何遊戲或是機器學習端出現錯誤時,MLGame 會停止執行,並印出錯誤原因,同時也會回傳錯誤代碼(可用 echo $? 來查看)來標示錯誤類型。

  • 0:正常結束。
  • 1:未處理的錯誤,也就是 MLGame 沒預料到的錯誤。
  • 2:指令錯誤。在啟動 MLGame 的指令中有錯誤。
  • 3:遊戲執行錯誤。遊戲或是機器學習端發生錯誤。
  • 4:編譯錯誤。在編譯非 python 的玩家程式時,發生的錯誤。
⚠️ **GitHub.com Fallback** ⚠️