4.4 KiB
4.4 KiB
Easy Game
這是一個吃東西小遊戲,也是 PAIA 的遊戲教學範例
基礎介紹
啟動方式
- 直接啟動 main.py 即可執行
遊戲參數設定
# main.py
game = EasyGame(
level: int = 1,
level_file: str = None,
sound: str = "off")
level
: 選定內建關卡,預設為 1 選擇第一關。level_file
: 使用外部檔案作為關卡,請注意,使用此設定將會覆蓋掉關卡編號,並且不會自動進入下一關。sound
: 音效。
玩法
- 使用鍵盤 上、下、左、右 控制方塊
目標
- 在遊戲時間截止前,盡可能吃到愈多的食物吧!
通關條件
- 時間結束前,吃到的食物超過
score
,即可過關。
失敗條件
- 時間結束前,吃到的食物少於
score
,即算失敗。
遊戲系統
-
行動機制
上下左右的行動,每次移動
10.5px
-
座標系統
- 螢幕大小 800 x 600
- 主角方塊 30 x 30
- 食物方塊 8 x 8
進階說明
使用AI玩遊戲
# 在easy game中,打開終端機
python -m mlgame -i ./ml/ml_play_template.py ./ --level 3
python -m mlgame -i ./ml/ml_play_template.py ./ --level_file /path_to_file/level_file.json
AI範例
import random
class MLPlay:
def __init__(self,ai_name,*args, **kwargs):
print("Initial ml script")
def update(self, scene_info: dict,,*args, **kwargs):
# print("AI received data from game :", scene_info)
actions = ["UP", "DOWN", "LEFT", "RIGHT", "NONE"]
return random.sample(actions, 1)
def reset(self):
"""
Reset the status
"""
print("reset ml script")
pass
遊戲資訊
- scene_info 的資料格式如下
{
"frame": 25,
"player_x": 425,
"player_y": 306,
"player_size": 90,
"player_vel": 16,
"foods": [
{
"x": 656,
"y": 210,
"type": "GOOD_1",
"score": 1
},
...,
{
"x": 371,
"y": 217,
"type": "BAD_1",
"score": -1
}
],
"score": 0,
"status": "GAME_ALIVE"
}
frame
:遊戲畫面更新的編號player_x
:主角方塊的X座標,表示方塊的中心點
座標值,單位 pixel。player_y
:主角方塊的Y座標,表示方塊的中心點
座標值,單位 pixel。player_size
:主角方塊的大小,表示方塊的長寬,單位 pixel。player_vel
:主角方塊的速度,表示方塊每幀移動的像素,單位 pixel。foods
:食物的清單,清單內每一個物件都是一個食物的左上方座標值,也會提供此食物是什麼類型和分數多少。type
食物類型:GOOD_1
,GOOD_2
,GOOD_3
,BAD_1
,BAD_2
,BAD_3
score
:目前得到的分數score_to_pass
:通關分數status
: 目前遊戲的狀態GAME_ALIVE
:遊戲進行中GAME_PASS
:遊戲通關GAME_OVER
:遊戲結束
動作指令
- 在 update() 最後要回傳一個字串,主角物件即會依照對應的字串行動,一次只能執行一個行動。
UP
:向上移動DOWN
:向下移動LEFT
:向左移動RIGHT
:向右移動NONE
:原地不動
遊戲結果
- 最後結果會顯示在console介面中,若是PAIA伺服器上執行,會回傳下列資訊到平台上。
{
"frame_used": 100,
"state": "FAIL",
"attachment": [
{
"player": "1P",
"score": 0,
"rank": 1,
"passed": false
}
]
}
frame_used
:表示使用了多少個framestate
:表示遊戲結束的狀態FAIL
:遊戲失敗FINISH
:遊戲完成
attachment
:紀錄遊戲各個玩家的結果與分數等資訊player
:玩家編號score
:吃到的食物總數rank
:排名passed
:是否通關