diff --git a/levels/001.json b/levels/001.json index a3dfcd9..daf9bce 100644 --- a/levels/001.json +++ b/levels/001.json @@ -5,6 +5,11 @@ "score_to_pass": 10, "good_food_count": [0,0,0], "bad_food_count": [0,0,0], - "fish": 3 + "food_1": 3, + "food_2": 0, + "food_3": 0, + "garbage_1": 3, + "garbage_2": 0, + "garbage_3": 0 } \ No newline at end of file diff --git a/src/foods.py b/src/foods.py index 7fae64f..3fedf77 100644 --- a/src/foods.py +++ b/src/foods.py @@ -1,4 +1,3 @@ -import math import random import pygame.sprite @@ -7,6 +6,8 @@ from pygame import Rect from .env import FoodTypeEnum, FOOD_COLOR_MAP, FOOD_LV1_SIZE, FOOD_LV2_SIZE, FOOD_LV3_SIZE from mlgame.view.view_model import create_rect_view_data +FOOD1_VEL = 1 + class Food(pygame.sprite.Sprite): def __init__(self, group): @@ -18,10 +19,12 @@ class Food(pygame.sprite.Sprite): self.rect = self.image.get_rect() self.angle = 0 - def set_center_x_and_y(self,x:int,y:int): + + def set_center_x_and_y(self, x: int, y: int): self.rect.centerx = x self.rect.centery = y - def update(self,*args,**kwargs) -> None: + + def update(self, *args, **kwargs) -> None: pass @property @@ -45,6 +48,7 @@ class GoodFoodLv1(Food): self.score = 1 self.rect = self.image.get_rect() + class GoodFoodLv2(Food): def __init__(self, group): super().__init__(group) @@ -55,6 +59,7 @@ class GoodFoodLv2(Food): self.score = 2 self.rect = self.image.get_rect() + class GoodFoodLv3(Food): def __init__(self, group): super().__init__(group) @@ -64,7 +69,9 @@ class GoodFoodLv3(Food): self.color = FOOD_COLOR_MAP[self.type] self.score = 4 self.rect = self.image.get_rect() -class Fish(Food): + + +class Food1(Food): def __init__(self, group): super().__init__(group) @@ -73,39 +80,26 @@ class Fish(Food): self.color = FOOD_COLOR_MAP[self.type] self.score = 1 self.rect = self.image.get_rect() - self._target_x=400 - self._target_y=400 - self._direction = 1 - self._vel=2 - self._vely=1 - def update(self,playground:Rect): + self.rect_float_x = 0 + self.rect_float_y = 0 + self._vel = FOOD1_VEL + def set_center_x_and_y(self, x: int, y: int): + self.rect.centerx = x + self.rect.centery = y + self.rect_float_x = self.rect.centerx + self.rect_float_y = self.rect.centery + def update(self, playground: Rect, squid: pygame.sprite.Sprite): - if self._direction==1: - if self.rect.centerx > self._target_x: - # change - self._direction= - self._direction - self._target_x = random.randint(playground.left, playground.right) - self._target_y = self.rect.centery + random.randint(-20,20) - self._vely = self._vel * ((self._target_y - self.rect.centery)/(self._target_x - self.rect.centerx) ) + self.rect_float_x += self._vel + self.rect_float_y += random.choice([-0.3,-0.5,-0.7,0,0.3,0.5,0.7]) + self.rect.centerx = self.rect_float_x + self.rect.centery = self.rect_float_y - pass - # move to right - self.rect.centerx += self._vel - self.rect.centery = self.rect.centery +self._vely - elif self._direction==-1: - if self.rect.centerx < self._target_x: - # change - self._direction= - self._direction - self._target_x = random.randint(playground.left, playground.right) - self._target_y = self.rect.centery + random.randint(-50,50) - self.rect.centery = self.rect.centery + self._vely - - pass - self.rect.centerx -= self._vel - self.rect.centery -= math.sin(self.rect.centerx) - pass - pass + if self.rect.left < playground.left and self._vel < 0.0: + self._vel = FOOD1_VEL + elif self.rect.right > playground.right and self._vel>0.0: + self._vel = - FOOD1_VEL @@ -119,6 +113,7 @@ class BadFoodLv1(Food): self.rect = self.image.get_rect() self.angle = 0 + class BadFoodLv2(Food): def __init__(self, group): super().__init__(group) @@ -129,6 +124,7 @@ class BadFoodLv2(Food): self.score = -2 self.rect = self.image.get_rect() + class BadFoodLv3(Food): def __init__(self, group): super().__init__(group) diff --git a/src/game.py b/src/game.py index 2646639..9e4be0f 100644 --- a/src/game.py +++ b/src/game.py @@ -96,7 +96,7 @@ class EasyGame(PaiaGame): 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._create_foods(Fish, game_params.fish) + self._create_foods(Food1, game_params.food_1) self.frame_count = 0 self._frame_count_down = self._frame_limit @@ -115,7 +115,7 @@ class EasyGame(PaiaGame): self.ball.update(action) revise_ball(self.ball, self.playground) # update sprite - self.foods.update(playground=self.playground) + self.foods.update(playground=self.playground,squid=self.ball) # handle collision diff --git a/src/game_object.py b/src/game_object.py index 31cb37b..8ab1a81 100644 --- a/src/game_object.py +++ b/src/game_object.py @@ -18,7 +18,13 @@ class LevelParams(pydantic.BaseModel): good_food_count:List[int] =[] bad_food_count:List[int] =[] - fish:int=0 + + food_1:int=0 + food_2:int=0 + food_3:int=0 + garbage_1:int=0 + garbage_2:int=0 + garbage_3:int=0 class Ball(pygame.sprite.Sprite): def __init__(self):