From b7076e4b324c8d89efc158c700619e04a529bf8e Mon Sep 17 00:00:00 2001 From: Kylin_on_Mac Date: Wed, 11 Oct 2023 16:18:19 +0800 Subject: [PATCH] fix: update key in level file and fix error when reset game --- README.md | 3 ++- game_config.json | 4 ++-- levels/001.json | 4 ++-- levels/002.json | 4 ++-- levels/003.json | 4 ++-- levels/004.json | 4 ++-- levels/005.json | 4 ++-- levels/006.json | 4 ++-- levels/007.json | 4 ++-- levels/008.json | 4 ++-- levels/009.json | 4 ++-- levels/010.json | 4 ++-- levels/template.json | 4 ++-- src/game.py | 48 ++++++++++++++++++++------------------------ 14 files changed, 48 insertions(+), 51 deletions(-) diff --git a/README.md b/README.md index 1635685..1ec4b60 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,8 @@ game = EasyGame( ```bash # 在easy game中,打開終端機 -python -m mlgame -i ./ml/ml_play_template.py ./ --time_to_play 1200 --green_food_count 15 --red_food_count 10 --score_to_pass 10 --playground_size 100,200 +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範例 diff --git a/game_config.json b/game_config.json index 6ed2edf..0f7e7c6 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/levels/001.json b/levels/001.json index 2a5c36c..42701af 100644 --- a/levels/001.json +++ b/levels/001.json @@ -5,6 +5,6 @@ 200 ], "score_to_pass": 10, - "green_food_count": [3,0,0], - "black_food_count": [0,0,0] + "good_food_count": [3,0,0], + "bad_food_count": [0,0,0] } \ No newline at end of file diff --git a/levels/002.json b/levels/002.json index 1d7ad96..01b35a3 100644 --- a/levels/002.json +++ b/levels/002.json @@ -5,6 +5,6 @@ 200 ], "score_to_pass": 15, - "green_food_count": [5,0,0], - "black_food_count": [0,0,0] + "good_food_count": [5,0,0], + "bad_food_count": [0,0,0] } \ No newline at end of file diff --git a/levels/003.json b/levels/003.json index 1e7af2e..0363ee9 100644 --- a/levels/003.json +++ b/levels/003.json @@ -5,6 +5,6 @@ 300 ], "score_to_pass": 15, - "green_food_count": [6,0,0], - "black_food_count": [2,0,0] + "good_food_count": [6,0,0], + "bad_food_count": [2,0,0] } \ No newline at end of file diff --git a/levels/004.json b/levels/004.json index 61f4ddd..3fd03b9 100644 --- a/levels/004.json +++ b/levels/004.json @@ -5,6 +5,6 @@ 300 ], "score_to_pass": 15, - "green_food_count": [8,0,0], - "black_food_count": [4,0,0] + "good_food_count": [8,0,0], + "bad_food_count": [4,0,0] } \ No newline at end of file diff --git a/levels/005.json b/levels/005.json index 09e99fc..cc1c2d7 100644 --- a/levels/005.json +++ b/levels/005.json @@ -5,6 +5,6 @@ 300 ], "score_to_pass": 15, - "green_food_count": [8,3,0], - "black_food_count": [4,0,0] + "good_food_count": [8,3,0], + "bad_food_count": [4,0,0] } \ No newline at end of file diff --git a/levels/006.json b/levels/006.json index bac42f3..3632840 100644 --- a/levels/006.json +++ b/levels/006.json @@ -5,6 +5,6 @@ 400 ], "score_to_pass": 15, - "green_food_count": [8,4,0], - "black_food_count": [5,2,0] + "good_food_count": [8,4,0], + "bad_food_count": [5,2,0] } \ No newline at end of file diff --git a/levels/007.json b/levels/007.json index 84ee5bf..c6ca5a4 100644 --- a/levels/007.json +++ b/levels/007.json @@ -5,6 +5,6 @@ 400 ], "score_to_pass": 20, - "green_food_count": [8,4,2], - "black_food_count": [4,4,0] + "good_food_count": [8,4,2], + "bad_food_count": [4,4,0] } \ No newline at end of file diff --git a/levels/008.json b/levels/008.json index c94adc3..b69ef36 100644 --- a/levels/008.json +++ b/levels/008.json @@ -5,6 +5,6 @@ 500 ], "score_to_pass": 20, - "green_food_count": [6,4,2], - "black_food_count": [6,4,2] + "good_food_count": [6,4,2], + "bad_food_count": [6,4,2] } \ No newline at end of file diff --git a/levels/009.json b/levels/009.json index 9ee974f..67a42c4 100644 --- a/levels/009.json +++ b/levels/009.json @@ -5,6 +5,6 @@ 500 ], "score_to_pass": 25, - "green_food_count": [10,5,3], - "black_food_count": [12,7,4] + "good_food_count": [10,5,3], + "bad_food_count": [12,7,4] } \ No newline at end of file diff --git a/levels/010.json b/levels/010.json index d7450e3..9dda519 100644 --- a/levels/010.json +++ b/levels/010.json @@ -5,6 +5,6 @@ 600 ], "score_to_pass": 25, - "green_food_count": [12,8,4], - "black_food_count": [25,10,5] + "good_food_count": [12,8,4], + "bad_food_count": [25,10,5] } \ No newline at end of file diff --git a/levels/template.json b/levels/template.json index 3b9a69a..3a25bec 100644 --- a/levels/template.json +++ b/levels/template.json @@ -5,7 +5,7 @@ 200 ], "score_to_pass": 10, - "green_food_count": [3,0,0], - "black_food_count": [0,0,0] + "good_food_count": [3,0,0], + "bad_food_count": [0,0,0] } \ No newline at end of file diff --git a/src/game.py b/src/game.py index 9f063ef..67839d0 100644 --- a/src/game.py +++ b/src/game.py @@ -36,7 +36,7 @@ class EasyGame(PaiaGame): def __init__( self, - level: int = 1, + level: int = -1, level_file: str = None, sound: str = "off", *args, **kwargs): @@ -49,17 +49,8 @@ class EasyGame(PaiaGame): self.foods = pygame.sprite.Group() self.sound_controller = SoundController(sound) - if path.isfile(self._level_file) or self._level_file == "": - # set by injected file - self._init_game_by_file(self._level_file) - pass + self._init_game() - else: - 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") - self._init_game_by_file(level_file_path) def _init_game_by_file(self, level_file_path: str): try: @@ -82,8 +73,8 @@ class EasyGame(PaiaGame): self._playground_w, self._playground_h ) - self._green_food_count = game_params["green_food_count"] - self._red_food_count = game_params["black_food_count"] + self._good_food_count = game_params["good_food_count"] + self._bad_food_count = game_params["bad_food_count"] self._score_to_pass = int(game_params["score_to_pass"]) self._frame_limit = int(game_params["time_to_play"]) self.playground.center = (WIDTH / 2, HEIGHT / 2) @@ -94,12 +85,12 @@ class EasyGame(PaiaGame): self.score = 0 # todo validate food count - self._create_foods(GoodFoodLv1, self._green_food_count[0]) - self._create_foods(GoodFoodLv2, self._green_food_count[1]) - self._create_foods(GoodFoodLv3, self._green_food_count[2]) - self._create_foods(BadFoodLv1, self._red_food_count[0]) - self._create_foods(BadFoodLv2, self._red_food_count[1]) - self._create_foods(BadFoodLv3, self._red_food_count[2]) + self._create_foods(GoodFoodLv1, self._good_food_count[0]) + self._create_foods(GoodFoodLv2, self._good_food_count[1]) + self._create_foods(GoodFoodLv3, self._good_food_count[2]) + self._create_foods(BadFoodLv1, self._bad_food_count[0]) + self._create_foods(BadFoodLv2, self._bad_food_count[1]) + self._create_foods(BadFoodLv3, self._bad_food_count[2]) self.frame_count = 0 self._frame_count_down = self._frame_limit @@ -182,19 +173,24 @@ class EasyGame(PaiaGame): def reset(self): if self.is_passed: - self.sound_controller.play_cheer() - - if self._level_file: - pass - elif self.is_passed and self._level != -1: - # win and use level will enter next level self._level += 1 - self._init_game_by_level(self._level) + self.sound_controller.play_cheer() self._init_game() + + pass + def _init_game(self): + if path.isfile(self._level_file) or self._level_file == "": + # set by injected file + self._init_game_by_file(self._level_file) + pass + else: + level_file_path = os.path.join(LEVEL_PATH, f"{self._level:03d}.json") + self._init_game_by_file(level_file_path) + @property def is_passed(self): return self.score > self._score_to_pass