From d8203188149b188c7b2bebd90bdad0913483cf3d Mon Sep 17 00:00:00 2001 From: paulusja Date: Thu, 23 Apr 2026 18:24:42 +0200 Subject: [PATCH] Let snake grow when it hits the prey. --- snake/snake.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/snake/snake.py b/snake/snake.py index 8e49cb7..712c72c 100644 --- a/snake/snake.py +++ b/snake/snake.py @@ -3,6 +3,7 @@ from game_object import GameObject from snake_segment import SnakeSegment from snake_state_machine import SnakeStateMachine from wall import Wall +from prey import Prey class Snake(GameObject): @@ -14,6 +15,7 @@ class Snake(GameObject): self.__state_machine = SnakeStateMachine() self.__is_dead = False + self.__shall_grow = False def __collides_with_wall(self, obj: GameObject): @@ -24,10 +26,16 @@ class Snake(GameObject): return isinstance(obj, Snake) and self.get_bounding_boxes()[0].collidelist(obj.get_bounding_boxes()[1:]) > -1 + def __collides_with_prey(self, obj: GameObject): + return isinstance(obj, Prey) and self.get_bounding_boxes()[0].colliderect(obj.get_bounding_boxes()[0]) + + def __update_on_collision(self, game_objs: list[GameObject]) -> None: for obj in game_objs: if self.__collides_with_wall(obj) or self.__collides_with_self(obj): self.__is_dead = True + elif self.__collides_with_prey(obj): + self.__shall_grow = True def draw(self, surface: pygame.Surface) -> None: @@ -35,6 +43,8 @@ class Snake(GameObject): segment.draw(surface) def update(self, user_input: int, game_objs: list[GameObject]) -> None: + self.__shall_grow = False + if not self.__is_dead: self.__update_on_collision(game_objs) @@ -43,7 +53,10 @@ class Snake(GameObject): new_head = self.__state_machine.get_state().get_next_head(self.__segments[0]) self.__segments.insert(0, new_head) - self.__segments.pop() + + if not self.__shall_grow: + self.__segments.pop() + def get_bounding_boxes(self) -> list[pygame.rect.Rect]: return [seg.get_bounding_boxes()[0] for seg in self.__segments] \ No newline at end of file