From 079c0c9e43665a8127bec774fcef3fc0c4aae6c1 Mon Sep 17 00:00:00 2001
From: Kylin_on_Mac <kylingithubdev@gmail.com>
Date: Fri, 22 Sep 2023 12:30:58 +0800
Subject: [PATCH] feat: add black food

---
 src/enums.py       |  6 ++++++
 src/game.py        | 36 +++++++++++++++++++-----------------
 src/game_object.py | 12 ++++++++----
 3 files changed, 33 insertions(+), 21 deletions(-)
 create mode 100644 src/enums.py

diff --git a/src/enums.py b/src/enums.py
new file mode 100644
index 0000000..6c630cd
--- /dev/null
+++ b/src/enums.py
@@ -0,0 +1,6 @@
+
+from enum import auto
+from mlgame.utils.enum import StringEnum
+class FoodTypeEnum(StringEnum):
+    GREEN = auto()
+    BLACK = auto()
diff --git a/src/game.py b/src/game.py
index c1b8620..6ccf24c 100644
--- a/src/game.py
+++ b/src/game.py
@@ -8,6 +8,7 @@ from mlgame.utils.enum import get_ai_name
 from mlgame.view.decorator import check_game_progress, check_game_result
 from mlgame.view.view_model import create_text_view_data, create_asset_init_data, create_image_view_data, Scene, \
     create_scene_progress_data
+from .enums import FoodTypeEnum
 from .game_object import Ball, Food
 
 ASSET_PATH = path.join(path.dirname(__file__), "../asset")
@@ -19,21 +20,26 @@ class EasyGame(PaiaGame):
     This is a Interface of a game
     """
 
-    def __init__(self, time_to_play, green_food_count,black_food_count, score, color, *args, **kwargs):
+    def __init__(self, time_to_play, green_food_count, black_food_count, score, color, *args, **kwargs):
         super().__init__(user_num=1)
         self.game_result_state = GameResultState.FAIL
         self.scene = Scene(width=800, height=600, color="#111111", bias_x=0, bias_y=0)
-        self.total_point_count = green_food_count
+        self.green_food_count = green_food_count
+        self.black_food_count = black_food_count
         self.color = color
-        self.ball = Ball("#" + color)
         self.foods = pygame.sprite.Group()
-        self.score = 0
         self.score_to_win = score
-        self._create_foods(self.total_point_count)
-        self._begin_time = time.time()
-        self._frame_count_down = time_to_play
         self.frame_limit = time_to_play
+        self.init_game()
+
+    def init_game(self):
+        self.ball = Ball("#" + self.color)
+        self.foods.empty()
+        self.score = 0
+        self._create_foods(self.green_food_count,FoodTypeEnum.GREEN)
+        self._create_foods(self.black_food_count,FoodTypeEnum.BLACK)
         self.frame_count = 0
+        self._frame_count_down = self.frame_limit
 
     def update(self, commands):
         # handle command
@@ -96,13 +102,8 @@ class EasyGame(PaiaGame):
         return status
 
     def reset(self):
-        self.score = 0
-        self._begin_time = time.time()
-        self._frame_count_down = 0
-        self.frame_count = 0
-        self.ball = Ball("#" + self.color)
-        self.foods = pygame.sprite.Group()
-        self._create_foods(self.total_point_count)
+        self.init_game()
+
         pass
 
     @property
@@ -138,7 +139,8 @@ class EasyGame(PaiaGame):
         game_obj_list.extend(foods_data)
         backgrounds = [create_image_view_data("background", 0, 0, 800, 600)]
         foregrounds = [create_text_view_data(f"Score = {str(self.score)}", 650, 50, "#FF0000", "24px Arial BOLD")]
-        toggle_objs = [create_text_view_data(f"{self._frame_count_down:04d} frame", 650, 100, "#FFAA00", "24px Arial BOLD")]
+        toggle_objs = [
+            create_text_view_data(f"{self._frame_count_down:04d} frame", 650, 100, "#FFAA00", "24px Arial BOLD")]
         scene_progress = create_scene_progress_data(frame=self.frame_count, background=backgrounds,
                                                     object_list=game_obj_list,
                                                     foreground=foregrounds, toggle=toggle_objs)
@@ -181,8 +183,8 @@ class EasyGame(PaiaGame):
             cmd_1p.append("NONE")
         return {get_ai_name(0): cmd_1p}
 
-    def _create_foods(self, count: int = 5):
+    def _create_foods(self, count: int = 5, type: FoodTypeEnum = FoodTypeEnum.GREEN):
         for i in range(count):
             # add food to group
-            food = Food(self.foods)
+            food = Food(self.foods, type)
         pass
diff --git a/src/game_object.py b/src/game_object.py
index f37899e..7f51b0b 100644
--- a/src/game_object.py
+++ b/src/game_object.py
@@ -2,9 +2,11 @@ import random
 
 import pygame.sprite
 
+from games.easy_game.src.enums import FoodTypeEnum
 from mlgame.view.view_model import create_rect_view_data
 
-FOOD_COLOR = "#009688"
+FOOD_COLOR_MAP = {FoodTypeEnum.GREEN: "#009688",
+                  FoodTypeEnum.BLACK: "#263238"}
 
 BALL_VEL = 10.5
 
@@ -53,10 +55,12 @@ class Ball(pygame.sprite.Sprite):
 
 
 class Food(pygame.sprite.Sprite):
-    def __init__(self, group):
+    def __init__(self, group, type: FoodTypeEnum):
         pygame.sprite.Sprite.__init__(self, group)
         self.image = pygame.Surface([8, 8])
-        self.color = FOOD_COLOR
+        self.type = FoodTypeEnum.GREEN
+        self.color = FOOD_COLOR_MAP[type]
+
         self.rect = self.image.get_rect()
         self.rect.centerx = random.randint(0, 800)
         self.rect.centery = random.randint(0, 600)
@@ -74,4 +78,4 @@ class Food(pygame.sprite.Sprite):
             self.rect.width,
             self.rect.height,
             self.color
-        )
\ No newline at end of file
+        )