diff --git a/maps/001.json b/maps/001.json index 0928b3c..0add4b6 100644 --- a/maps/001.json +++ b/maps/001.json @@ -4,9 +4,15 @@ "playground_size_h":400, "score_to_pass": 10, "food_1": 5, + "food_1_max": 5, "food_2": 0, + "food_2_max": 0, "food_3": 0, + "food_3_max": 0, "garbage_1": 0, + "garbage_1_max": 0, "garbage_2": 0, - "garbage_3": 0 + "garbage_2_max": 0, + "garbage_3": 0, + "garbage_3_max": 0 } \ No newline at end of file diff --git a/maps/002.json b/maps/002.json index 235fef9..16d401c 100644 --- a/maps/002.json +++ b/maps/002.json @@ -4,9 +4,15 @@ "playground_size_h":400, "score_to_pass": 20, "food_1": 5, + "food_1_max": 5, "food_2": 1, + "food_2_max": 1, "food_3": 0, + "food_3_max": 0, "garbage_1": 0, + "garbage_1_max": 0, "garbage_2": 0, - "garbage_3": 0 + "garbage_2_max": 0, + "garbage_3": 0, + "garbage_3_max": 0 } \ No newline at end of file diff --git a/maps/003.json b/maps/003.json index 6c0c776..98b079d 100644 --- a/maps/003.json +++ b/maps/003.json @@ -4,9 +4,15 @@ "playground_size_h":400, "score_to_pass": 30, "food_1": 4, + "food_1_max": 4, "food_2": 2, + "food_2_max": 2, "food_3": 0, + "food_3_max": 0, "garbage_1": 3, + "garbage_1_max": 3, "garbage_2": 0, - "garbage_3": 0 + "garbage_2_max": 0, + "garbage_3": 0, + "garbage_3_max": 0 } \ No newline at end of file diff --git a/maps/004.json b/maps/004.json index da6d22a..9533213 100644 --- a/maps/004.json +++ b/maps/004.json @@ -4,9 +4,15 @@ "playground_size_h":400, "score_to_pass": 40, "food_1": 8, + "food_1_max": 8, "food_2": 2, + "food_2_max": 2, "food_3": 0, + "food_3_max": 0, "garbage_1": 4, + "garbage_1_max": 4, "garbage_2": 0, - "garbage_3": 0 + "garbage_2_max": 0, + "garbage_3": 0, + "garbage_3_max": 0 } \ No newline at end of file diff --git a/maps/005.json b/maps/005.json index 1ca3f45..518417a 100644 --- a/maps/005.json +++ b/maps/005.json @@ -4,9 +4,15 @@ "playground_size_h":400, "score_to_pass": 50, "food_1": 8, + "food_1_max": 8, "food_2": 4, + "food_2_max": 4, "food_3": 0, + "food_3_max": 0, "garbage_1": 3, + "garbage_1_max": 3, "garbage_2": 1, - "garbage_3": 0 + "garbage_2_max": 1, + "garbage_3": 0, + "garbage_3_max": 0 } \ No newline at end of file diff --git a/maps/006.json b/maps/006.json index a19c80e..2228f6a 100644 --- a/maps/006.json +++ b/maps/006.json @@ -4,9 +4,15 @@ "playground_size_h":400, "score_to_pass": 60, "food_1": 8, + "food_1_max": 8, "food_2": 4, + "food_2_max": 4, "food_3": 0, + "food_3_max": 0, "garbage_1": 5, + "garbage_1_max": 5, "garbage_2": 2, - "garbage_3": 0 + "garbage_2_max": 2, + "garbage_3": 0, + "garbage_3_max": 0 } \ No newline at end of file diff --git a/maps/007.json b/maps/007.json index 3892e8d..cb1a762 100644 --- a/maps/007.json +++ b/maps/007.json @@ -4,9 +4,15 @@ "playground_size_h":500, "score_to_pass": 70, "food_1": 8, + "food_1_max": 8, "food_2": 4, + "food_2_max": 4, "food_3": 2, + "food_3_max": 2, "garbage_1": 4, + "garbage_1_max": 4, "garbage_2": 2, - "garbage_3": 0 + "garbage_2_max": 2, + "garbage_3": 0, + "garbage_3_max": 0 } \ No newline at end of file diff --git a/maps/008.json b/maps/008.json index 59d7b6c..817f99d 100644 --- a/maps/008.json +++ b/maps/008.json @@ -4,9 +4,15 @@ "playground_size_h":600, "score_to_pass": 80, "food_1": 6, + "food_1_max": 10, "food_2": 4, + "food_2_max": 7, "food_3": 2, + "food_3_max": 5, "garbage_1": 3, + "garbage_1_max": 6, "garbage_2": 2, - "garbage_3": 2 + "garbage_2_max": 4, + "garbage_3": 2, + "garbage_3_max": 3 } \ No newline at end of file diff --git a/maps/template.json b/maps/template.json index df3baed..95ba785 100644 --- a/maps/template.json +++ b/maps/template.json @@ -4,10 +4,16 @@ "playground_size_h":550, "score_to_pass": 10, "food_1": 3, + "food_1_max": 5, "food_2": 2, + "food_2_max": 3, "food_3": 5, + "food_3_max": 7, "garbage_1": 1, + "garbage_1_max": 4, "garbage_2": 1, - "garbage_3": 1 + "garbage_2_max": 3, + "garbage_3": 1, + "garbage_3_max": 2 } \ No newline at end of file diff --git a/src/env.py b/src/env.py index dce4a6c..3419417 100644 --- a/src/env.py +++ b/src/env.py @@ -43,6 +43,8 @@ class FoodTypeEnum(StringEnum): GARBAGE_3 = auto() + + FOOD_LV1_SIZE = 30 FOOD_LV2_SIZE = 40 FOOD_LV3_SIZE = 50 diff --git a/src/game.py b/src/game.py index ea769e5..da6e12d 100644 --- a/src/game.py +++ b/src/game.py @@ -27,6 +27,8 @@ def revise_ball(ball: Squid, playground: pygame.Rect): ball.rect = ball_rect pass +FOOD_LIST = [Food1, Food2, Food3, Garbage1, Garbage2, Garbage3] + class SwimmingSquid(PaiaGame): """ @@ -51,6 +53,8 @@ class SwimmingSquid(PaiaGame): self._overtime_count = 0 self._game_times = game_times self._winner = [] + self._foods_num = [] + self._foods_max_num = [] self._init_game() @@ -71,6 +75,8 @@ class SwimmingSquid(PaiaGame): self._used_file = "001.json" finally: # set game params + self._foods_num.extend([game_params.food_1, game_params.food_2, game_params.food_3, game_params.garbage_1, game_params.garbage_2, game_params.garbage_3]) + self._foods_max_num.extend([game_params.food_1_max, game_params.food_2_max, game_params.food_3_max, game_params.garbage_1_max, game_params.garbage_2_max, game_params.garbage_3_max]) if game_params.playground_size_w > 700: game_params.playground_size_w = 700 self.playground = pygame.Rect( @@ -88,15 +94,18 @@ class SwimmingSquid(PaiaGame): self.squid1 = Squid(1, 200, 300) self.squid2 = Squid(2, 500, 300) self.foods.empty() - self._create_foods(Food1, game_params.food_1) - self._create_foods(Food2, game_params.food_2) - self._create_foods(Food3, game_params.food_3) - self._create_foods(Garbage1, game_params.garbage_1) - self._create_foods(Garbage2, game_params.garbage_2) - self._create_foods(Garbage3, game_params.garbage_3) + for i in range(6): + self._create_foods(FOOD_LIST[i], self._foods_num[i]) + # self._create_foods(Food1, game_params.food_1) + # self._create_foods(Food2, game_params.food_2) + # self._create_foods(Food3, game_params.food_3) + # self._create_foods(Garbage1, game_params.garbage_1) + # self._create_foods(Garbage2, game_params.garbage_2) + # self._create_foods(Garbage3, game_params.garbage_3) self.frame_count = 0 self._frame_count_down = self._frame_limit + self._new_food_frame = 0 self._overtime_count = 0 self.sound_controller.play_music() @@ -119,6 +128,14 @@ class SwimmingSquid(PaiaGame): self.squid2.update(self.frame_count, action_2) revise_ball(self.squid1, self.playground) revise_ball(self.squid2, self.playground) + # create new food + if self.frame_count - self._new_food_frame > 300: + for i in range(6): + if self._foods_max_num[i] > self._foods_num[i]: + self._foods_num[i] += 1 + self._create_foods(FOOD_LIST[i], 1) + self._new_food_frame = self.frame_count + # update sprite self.foods.update(playground=self.playground, squid=self.squid1) @@ -267,7 +284,7 @@ class SwimmingSquid(PaiaGame): @property def is_passed(self): if self.squid1.score >= self._score_to_pass or self.squid2.score >= self._score_to_pass: # 達成目標分數 - if self.squid1.score == self.squid2.score and self._overtime_count < 3: # 延長賽 + if self.squid1.score == self.squid2.score and self._overtime_count < 1: # 延長賽 self._frame_limit += 600 self._score_to_pass += 50 self._overtime_count += 1 diff --git a/src/game_object.py b/src/game_object.py index 4b094b8..71c6b7f 100644 --- a/src/game_object.py +++ b/src/game_object.py @@ -18,11 +18,17 @@ class LevelParams(pydantic.BaseModel): time_to_play: int = 300 food_1: int = 3 + food_1_max: int = 3 food_2: int = 0 + food_2_max: int = 0 food_3: int = 0 + food_3_max: int = 0 garbage_1: int = 0 + garbage_1_max: int = 0 garbage_2: int = 0 + garbage_2_max: int = 0 garbage_3: int = 0 + garbage_3_max: int = 0 # level_thresholds = [10, 15, 20, 25, 30]