From fec545bfe0a86f4c10576d0eefac2cddd39567e3 Mon Sep 17 00:00:00 2001 From: Kylin_on_Mac Date: Tue, 10 Oct 2023 23:36:52 +0800 Subject: [PATCH] doc: update README.md --- README.md | 29 +++++++++++++---------------- game_config.json | 4 ++-- src/game.py | 40 +++++++++++++++++++--------------------- 3 files changed, 34 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index 8f962db..0eeddc8 100644 --- a/README.md +++ b/README.md @@ -22,20 +22,11 @@ ```python # main.py game = EasyGame( - time_to_play, score_to_pass, - green_food_count, red_food_count, - playground_size: list, - level: int = -1, + level: int = 1, level_file: str = None, sound: str = "off") ``` - -- `time_to_play`:遊戲執行的終止時間,單位是 frame,也就是遊戲內部更新畫面的次數,每更新一次 frame +1 -- `green_food_count`:遊戲中綠色食物的數量。 -- `red_food_count`:遊戲中紅色食物的數量。 -- `score_to_pass`:遊戲通關的點數,要超過這個分數才算過關。 -- `playground_size`:可移動區域的大小。 使用逗號將數字隔開 `width,height` `100,200` -- `level`: 選定內建關卡,請注意,使用此設定將會覆蓋掉上述其他關卡參數設定,預設為 -1 不選擇任何關卡。 +- `level`: 選定內建關卡,預設為 1 選擇第一關。 - `level_file`: 使用外部檔案作為關卡,請注意,使用此設定將會覆蓋掉關卡編號,並且不會自動進入下一關。 - `sound`: 音效。 @@ -83,10 +74,10 @@ python -m mlgame -i ./ml/ml_play_template.py ./ --time_to_play 1200 --green_food import random class MLPlay: - def __init__(self): + def __init__(self,ai_name,*args, **kwargs): print("Initial ml script") - def update(self, scene_info: dict): + def update(self, scene_info: dict,,*args, **kwargs): # print("AI received data from game :", scene_info) @@ -114,12 +105,16 @@ class MLPlay: "foods": [ { "x": 656, - "y": 210 + "y": 210, + "type": "GOOD_1", + "score": 1 }, ..., { "x": 371, - "y": 217 + "y": 217, + "type": "BAD_1", + "score": -1 } ], @@ -131,8 +126,10 @@ class MLPlay: - `frame`:遊戲畫面更新的編號 - `ball_x`:主角方塊的X座標,表示方塊的左邊座標值。 - `ball_y`:主角方塊的Y座標,表示方塊的上方座標值。 -- `foods`:食物的清單,清單內每一個物件都是一個食物的左上方座標值 +- `foods`:食物的清單,清單內每一個物件都是一個食物的左上方座標值,也會提供此食物是什麼類型和分數多少。 + - `type` 食物類型: `GOOD_1`, `GOOD_2`, `GOOD_3`, `BAD_1`, `BAD_2`, `BAD_3` - `score`:目前得到的分數 +- `score_to_pass`:通關分數 - `status`: 目前遊戲的狀態 - `GAME_ALIVE`:遊戲進行中 - `GAME_PASS`:遊戲通關 diff --git a/game_config.json b/game_config.json index 91c9875..6579291 100644 --- a/game_config.json +++ b/game_config.json @@ -18,8 +18,8 @@ "type": "int", "min": -1, "max": 100, - "default": -1, - "help": "選定內建關卡,請注意,使用此設定將會覆蓋掉其他關卡設定,預設為 -1 不選擇任何關卡。" + "default": 1, + "help": "選定內建關卡,預設為 1 選擇第一關。" }, { "name": "level_file", "verbose": "匯入關卡檔案", diff --git a/src/game.py b/src/game.py index 1db17cd..9f063ef 100644 --- a/src/game.py +++ b/src/game.py @@ -14,6 +14,21 @@ from .game_object import Ball from .sound_controller import SoundController +def revise_ball(ball: Ball, playground: pygame.Rect): + ball_rect = copy.deepcopy(ball.rect) + if ball_rect.left < playground.left: + ball_rect.left = playground.left + elif ball_rect.right > playground.right: + ball_rect.right = playground.right + + if ball_rect.top < playground.top: + ball_rect.top = playground.top + elif ball_rect.bottom > playground.bottom: + ball_rect.bottom = playground.bottom + ball.rect = ball_rect + pass + + class EasyGame(PaiaGame): """ This is a Interface of a game @@ -21,7 +36,7 @@ class EasyGame(PaiaGame): def __init__( self, - level: int = -1, + level: int = 1, level_file: str = None, sound: str = "off", *args, **kwargs): @@ -38,12 +53,9 @@ class EasyGame(PaiaGame): # set by injected file self._init_game_by_file(self._level_file) pass - elif self._level != -1: - # set by level number - self._init_game_by_level(self._level) - pass + else: - self._init_game_by_level(1) + self._init_game_by_level(self._level) def _init_game_by_level(self, level: int): level_file_path = os.path.join(LEVEL_PATH, f"{level:03d}.json") @@ -104,7 +116,7 @@ class EasyGame(PaiaGame): action = "NONE" self.ball.update(action) - self.revise_ball(self.ball, self.playground) + revise_ball(self.ball, self.playground) # update sprite self.foods.update() @@ -282,17 +294,3 @@ class EasyGame(PaiaGame): food.rect.centerx = random.randint(self.playground.left, self.playground.right) food.rect.centery = random.randint(self.playground.top, self.playground.bottom) pass - - def revise_ball(self, ball: Ball, playground: pygame.Rect): - ball_rect = copy.deepcopy(ball.rect) - if ball_rect.left < playground.left: - ball_rect.left = playground.left - elif ball_rect.right > playground.right: - ball_rect.right = playground.right - - if ball_rect.top < playground.top: - ball_rect.top = playground.top - elif ball_rect.bottom > playground.bottom: - ball_rect.bottom = playground.bottom - ball.rect = ball_rect - pass