Go to file
Kylin_on_Mac b7076e4b32 fix: update key in level file and fix error when reset game 2023-10-11 16:18:19 +08:00
asset doc: update README.md 2023-09-23 11:56:27 +08:00
levels fix: update key in level file and fix error when reset game 2023-10-11 16:18:19 +08:00
ml update ai and game_object.py 2022-08-03 15:08:36 +08:00
src fix: update key in level file and fix error when reset game 2023-10-11 16:18:19 +08:00
.gitignore add gitignore 2022-04-29 13:18:04 +08:00
LICENSE Create LICENSE 2023-09-26 11:56:36 +08:00
README.md fix: update key in level file and fix error when reset game 2023-10-11 16:18:19 +08:00
__init__.py update all to 2.0.0 2022-04-29 13:11:21 +08:00
blockly.json fix:update level file format 2023-10-10 23:13:56 +08:00
config.py Merge branch 'feature/update_to_fit_mlgame_9_5' into develop 2022-08-19 13:51:27 +08:00
game_config.json fix: update key in level file and fix error when reset game 2023-10-11 16:18:19 +08:00
game_development_tutorial.md update all to 2.0.0 2022-04-29 13:11:21 +08:00
main.py update game folder 2022-06-02 14:31:50 +08:00
requirements.txt doc: update requirements.txt 2023-09-23 11:39:44 +08:00

README.md

Easy Game

easy_game Python 3.9 MLGame pygame

這是一個吃東西小遊戲,也是 PAIA 的遊戲教學範例

demo


基礎介紹

啟動方式

  • 直接啟動 main.py 即可執行

遊戲參數設定

# main.py 
game = EasyGame(
            level: int = 1,
            level_file: str = None,
            sound: str = "off")
  • level: 選定內建關卡,預設為 1 選擇第一關。
  • level_file: 使用外部檔案作為關卡,請注意,使用此設定將會覆蓋掉關卡編號,並且不會自動進入下一關。
  • sound: 音效。

玩法

  • 使用鍵盤 上、下、左、右 控制方塊

目標

  1. 在遊戲時間截止前,盡可能吃到愈多的食物吧!

通關條件

  1. 時間結束前,吃到的食物超過score,即可過關。

失敗條件

  1. 時間結束前,吃到的食物少於score,即算失敗。

遊戲系統

  1. 行動機制

    上下左右的行動,每次移動10.5px

  2. 座標系統

    • 螢幕大小 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,
  "ball_x": 425,
  "ball_y": 306,
  "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:遊戲畫面更新的編號
  • ball_x:主角方塊的X座標,表示方塊的左邊座標值。
  • ball_y:主角方塊的Y座標,表示方塊的上方座標值。
  • 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表示使用了多少個frame
  • state:表示遊戲結束的狀態
    • FAIL:遊戲失敗
    • FINISH:遊戲完成
  • attachment:紀錄遊戲各個玩家的結果與分數等資訊
    • player:玩家編號
    • score:吃到的食物總數
    • rank:排名
    • passed:是否通關