From 87335c3b345ca92130b3d123194d19002b42327a Mon Sep 17 00:00:00 2001 From: Kylin_on_Mac Date: Tue, 10 Oct 2023 22:36:46 +0800 Subject: [PATCH] refac: add collision method --- src/foods.py | 30 ++++++++++++++++++++++++++++++ src/game.py | 34 +++++++++++++++++++--------------- src/game_object.py | 26 ++------------------------ 3 files changed, 51 insertions(+), 39 deletions(-) create mode 100644 src/foods.py diff --git a/src/foods.py b/src/foods.py new file mode 100644 index 0000000..4455668 --- /dev/null +++ b/src/foods.py @@ -0,0 +1,30 @@ +import pygame.sprite + +from games.easy_game.src.env import FoodTypeEnum, FOOD_COLOR_MAP +from mlgame.view.view_model import create_rect_view_data + + +class Food(pygame.sprite.Sprite): + def __init__(self, group, type: FoodTypeEnum): + pygame.sprite.Sprite.__init__(self, group) + self.image = pygame.Surface([8, 8]) + self.type = type + self.score = 0 + self.color = FOOD_COLOR_MAP[type] + + self.rect = self.image.get_rect() + self.angle = 0 + + def update(self) -> None: + pass + + @property + def game_object_data(self): + return create_rect_view_data( + "food", + self.rect.x, + self.rect.y, + self.rect.width, + self.rect.height, + self.color + ) diff --git a/src/game.py b/src/game.py index 119b726..926742e 100644 --- a/src/game.py +++ b/src/game.py @@ -10,7 +10,8 @@ from mlgame.view.decorator import check_game_progress, check_game_result from mlgame.view.view_model import * from .env import * from .env import FoodTypeEnum -from .game_object import Ball, Food +from .game_object import Ball +from .foods import Food from .sound_controller import SoundController @@ -103,20 +104,8 @@ class EasyGame(PaiaGame): self.foods.update() # handle collision - hits = pygame.sprite.spritecollide(self.ball, self.foods, True) - if hits: - for food in hits: - # TODO add food score to function - if food.type == FoodTypeEnum.GREEN: - self.sound_controller.play_eating_good() - self.score += 1 - self._create_foods(1, FoodTypeEnum.GREEN) - - elif food.type == FoodTypeEnum.RED: - self.sound_controller.play_eating_bad() - self._create_foods(1, FoodTypeEnum.RED) - self.score -= 1 + self._check_foods_collision() # self._timer = round(time.time() - self._begin_time, 3) self.frame_count += 1 @@ -126,6 +115,21 @@ class EasyGame(PaiaGame): if not self.is_running: return "RESET" + def _check_foods_collision(self): + hits = pygame.sprite.spritecollide(self.ball, self.foods, True) + if hits: + for food in hits: + self.score+= food.score + # TODO add food score to function + if food.type == FoodTypeEnum.GREEN: + self.sound_controller.play_eating_good() + self._create_foods(1, FoodTypeEnum.GREEN) + + elif food.type == FoodTypeEnum.RED: + self.sound_controller.play_eating_bad() + self._create_foods(1, FoodTypeEnum.RED) + + def get_data_from_game_to_player(self): """ send something to game AI @@ -136,7 +140,7 @@ class EasyGame(PaiaGame): for food in self.foods: # TODO add good food and bad food - foods_data.append({"x": food.rect.x, "y": food.rect.y,"type":food.type}) + foods_data.append({"x": food.rect.x, "y": food.rect.y,"type":food.type,"score":food.score}) data_to_1p = { "frame": self.frame_count, "ball_x": self.ball.rect.centerx, diff --git a/src/game_object.py b/src/game_object.py index e7c316a..bf0e9c9 100644 --- a/src/game_object.py +++ b/src/game_object.py @@ -1,6 +1,7 @@ import pygame.sprite -from games.easy_game.src.env import FoodTypeEnum, FOOD_COLOR_MAP, BALL_COLOR, BALL_VEL, BALL_H, BALL_W +from games.easy_game.src.env import BALL_COLOR, BALL_VEL, BALL_H, BALL_W +from games.easy_game.src.foods import Food from mlgame.view.view_model import create_rect_view_data @@ -44,26 +45,3 @@ class Ball(pygame.sprite.Sprite): ) -class Food(pygame.sprite.Sprite): - def __init__(self, group, type: FoodTypeEnum): - pygame.sprite.Sprite.__init__(self, group) - self.image = pygame.Surface([8, 8]) - self.type = type - self.color = FOOD_COLOR_MAP[type] - - self.rect = self.image.get_rect() - self.angle = 0 - - def update(self) -> None: - pass - - @property - def game_object_data(self): - return create_rect_view_data( - "food", - self.rect.x, - self.rect.y, - self.rect.width, - self.rect.height, - self.color - )