Skip to content

使用 blockly.json 自訂積木

You-Cheng Xiao edited this page Jun 1, 2022 · 3 revisions

如果尚未了解 PAIA Desktop 中提供了哪些積木讓使用者可以遊玩遊戲,可以先參考 基礎積木介紹

開發者目前只需要建立一個名為 blockly.json 的檔案在遊戲的根目錄,就可以自訂這些積木,以下將詳列 blockly.json 中可以包含的欄位,請注意每一個欄位對應的都必須是一個陣列。

INIT_INFO

用來自訂「初始資訊積木」的選項來讓使用者可以取得 __init__() 被傳進來的參數。

請為每一個被傳進來的參數在 "INIT_INFO" 的陣列中,新增一個格式為 [參數名, 英文描述, 中文描述] 的陣列,範例如下:

"INIT_INFO": [
    ["side", "player number", "玩家編號"]
]

請注意加入此欄位的選項同時也會在影響生成的 Python 程式碼,反應在 __init__() 的參數上面:

class MLPlay:
    def __init__(self, side, *args, **kwargs):
        ...

SCENE_INFO

用來自訂「取得積木」的選項來讓使用者可以在 update() 中取得目前遊戲的資訊。

請為每一個希望讓使用者取得的資訊在 "SCENE_INFO" 的陣列中,新增一個格式為 [取得對應資訊的程式碼, 英文描述, 中文描述] 的陣列,範例如下:

"SCENE_INFO": [
    ["scene_info['frame']", "# frame", "# 幀數"],
    ["scene_info['status']", "game status", "遊戲狀態"],
    ["scene_info['ball'][0]", "x coordinate of ball", "球的 x 座標"],
    ["scene_info['ball'][1]", "y coordinate of ball", "球的 y 座標"],
    ["scene_info['ball_served']", "the state of ball is served", "發球狀態"],
    ["scene_info['platform'][0]", "x coordinate of platform", "平台的 x 座標"],
    ["scene_info['platform'][1]", "y coordinate of platform", "平台的 y 座標"],
    ["scene_info['bricks']", "list of brick positions", "磚塊的位置清單"],
    ["scene_info['hard_bricks']", "list of hard brick positions", "堅硬磚塊的位置清單"],
    ["scene_info", "dictionary of all information", "包含所有資訊的字典"]
],

CONSTANT

用來自訂「常數積木」的選項來讓使用者可以不需查看遊戲說明就取得遊戲中一些重要的數值。

請為每一個希望讓使用者取得的常數在 "CONSTANT" 的陣列中,新增一個格式為 [數值, 英文描述, 中文描述] 的陣列,範例如下:

"CONSTANT": [
    [0, "left boundary", "左邊界"],
    [200, "right boundary", "右邊界"],
    [0, "top boundary", "上邊界"],
    [500, "bottom boundary", "下邊界"],
    [40, "platform width", "平台寬度"],
    [5, "platform height", "平台高度"],
    [400, "y coordinate of platform", "平台y座標"],
    [25, "brick width", "磚塊寬度"],
    [10, "brick height", "磚塊高度"],
    [5, "ball width", "球的邊長"]
]

ACTION

用來自訂「行動積木」的選項來讓使用者可以回傳特定的行動。

請為每一個可能的行動在 "ACTION" 的陣列中,新增一個格式為 [行動對應的程式碼, 英文描述, 中文描述] 的陣列,範例如下:

"ACTION": [
    ["['SPEED']", "speed up", "加速"],
    ["['BRAKE']", "brake", "減速"],
    ["['MOVE_LEFT']", "move left", "向左移動"],
    ["['MOVE_RIGHT']", "move left", "向右移動"],
    ["['SPEED', 'MOVE_LEFT']", "speed up and move left", "加速並向左移動"],
    ["['SPEED', 'MOVE_RIGHT']", "speed up and move right", "加速並向右移動"],
    ["['BRAKE', 'MOVE_LEFT']", "brake and move left", "減速並向左移動"],
    ["['BRAKE', 'MOVE_RIGHT']", "brake and move right", "減速並向右移動"],
    ["RESET", "RESET", "重置"],
    ["[]", "do nothing", "不動作"]
]

請特別注意如果要回傳的資料型態是陣列 ["SPEED"] 時,也仍然要表達成字串的形式 "['SPEED']"

ACTION_VALUE

當遊戲希望使用者回傳特定數值而非從有限的選項中選擇行動時,可以改用這個欄位來自訂另一種可以回傳字典的「行動積木」。

請為這個回傳的字典中的每一個需要的鍵值在 "ACTION_VALUE" 的陣列中,新增一個格式為 [鍵值, 數值類型, 預設數值, 英文描述, 中文描述] 的陣列,其中 數值類型 可以是 NUMBER 或是 STRING,範例如下:

"ACTION_VALUE": [
    ["left_PWM", "NUMBER", 100, "left PWM", "左輪轉速"],
    ["right_PWM", "NUMBER", 100, "right PWM", "右輪轉速"]
]

以上範例預設將在 Python 程式碼中回傳字典

{"left_PWM": 100, "right_PWM": 100}
Clone this wiki locally