From 6737efe94b1547b6e202d2c6e7632275017fab10 Mon Sep 17 00:00:00 2001 From: Kylin_on_Mac Date: Thu, 12 Oct 2023 17:08:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E7=AD=89=E7=B4=9A?= =?UTF-8?q?=E6=8F=90=E5=8D=87=E4=B8=8B=E9=99=8D=E7=9A=84=E9=9F=B3=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- asset/sounds/lv_down.wav | Bin 0 -> 15932 bytes asset/sounds/lv_up.wav | Bin 0 -> 22076 bytes src/game.py | 4 ++-- src/game_object.py | 17 ++++++++++++----- src/sound_controller.py | 10 ++++++++++ 5 files changed, 24 insertions(+), 7 deletions(-) create mode 100644 asset/sounds/lv_down.wav create mode 100644 asset/sounds/lv_up.wav diff --git a/asset/sounds/lv_down.wav b/asset/sounds/lv_down.wav new file mode 100644 index 0000000000000000000000000000000000000000..943843c4058705f2a41ddaa7b20d64e9370c9859 GIT binary patch literal 15932 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 L|3CgedEkElBC`p^ literal 0 HcmV?d00001 diff --git a/src/game.py b/src/game.py index 52aa4d9..26ae6c0 100644 --- a/src/game.py +++ b/src/game.py @@ -131,8 +131,8 @@ class EasyGame(PaiaGame): if hits: for food in hits: # self.ball.score += food.score - self.ball.eat_food(food) - # TODO if growth play special sound + # growth play special sound + self.ball.eat_food_and_change_level_and_play_sound(food,self.sound_controller) self._create_foods(food.__class__, 1) if isinstance(food, (GoodFoodLv1,GoodFoodLv2,GoodFoodLv3,)): self.sound_controller.play_eating_good() diff --git a/src/game_object.py b/src/game_object.py index d24f1e6..252287e 100644 --- a/src/game_object.py +++ b/src/game_object.py @@ -5,6 +5,7 @@ import pygame.sprite from games.easy_game.src.env import BALL_COLOR, BALL_VEL, BALL_H, BALL_W, BALL_GROWTH_SCORE_STEP, BALL_GROWTH_SIZE_STEP, \ BALL_SIZE_MAX, BALL_GROWTH_VEL_STEP, BALL_VEL_MAX from games.easy_game.src.foods import Food +from games.easy_game.src.sound_controller import SoundController from mlgame.view.view_model import create_rect_view_data @@ -18,6 +19,7 @@ class Ball(pygame.sprite.Sprite): self.rect.center = (400, 300) self._score = 0 self._vel = BALL_VEL + self._lv =1 def update(self, motion): # for motion in motions: @@ -49,12 +51,17 @@ class Ball(pygame.sprite.Sprite): self.color ) - def eat_food(self, food: Food): + def eat_food_and_change_level_and_play_sound(self, food: Food,sound_controller:SoundController): self._score += food.score - lv = math.ceil((self._score + 1) / BALL_GROWTH_SCORE_STEP) - self.rect.width = min(BALL_W + lv * BALL_GROWTH_SIZE_STEP, BALL_SIZE_MAX) - self.rect.height = min(BALL_H + lv * BALL_GROWTH_SIZE_STEP, BALL_SIZE_MAX) - self._vel = min(BALL_VEL + lv * BALL_GROWTH_VEL_STEP, BALL_VEL_MAX) + new_lv = math.ceil((self._score + 1) / BALL_GROWTH_SCORE_STEP) + self.rect.width = min(BALL_W + new_lv * BALL_GROWTH_SIZE_STEP, BALL_SIZE_MAX) + self.rect.height = min(BALL_H + new_lv * BALL_GROWTH_SIZE_STEP, BALL_SIZE_MAX) + self._vel = min(BALL_VEL + new_lv * BALL_GROWTH_VEL_STEP, BALL_VEL_MAX) + if new_lv > self._lv: + sound_controller.play_lv_up() + elif new_lv < self._lv: + sound_controller.play_lv_down() + self._lv=new_lv pass @property diff --git a/src/sound_controller.py b/src/sound_controller.py index 284109d..f755ed3 100644 --- a/src/sound_controller.py +++ b/src/sound_controller.py @@ -25,6 +25,8 @@ class SoundController(): self._eating_good = pygame.mixer.Sound(path.join(SOUND_PATH, "Coin.wav")) self._eating_bad = pygame.mixer.Sound(path.join(SOUND_PATH, "Low Boing.wav")) self._cheer = pygame.mixer.Sound(path.join(SOUND_PATH, "Cheer.wav")) + self._lv_up = pygame.mixer.Sound(path.join(SOUND_PATH, "lv_up.wav")) + self._lv_down = pygame.mixer.Sound(path.join(SOUND_PATH, "lv_down.wav")) except Exception: self._is_sound_on = False @@ -42,3 +44,11 @@ class SoundController(): @sound_enabled def play_cheer(self): self._cheer.play() + + @sound_enabled + def play_lv_up(self): + self._lv_up.play() + + @sound_enabled + def play_lv_down(self): + self._lv_down.play() \ No newline at end of file