From d19c45abbc2a70adb8084633ee83ff7a972d3333 Mon Sep 17 00:00:00 2001 From: paulusja Date: Thu, 23 Apr 2026 16:39:56 +0200 Subject: [PATCH] Kill snake on collision with itself. --- snake/snake.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/snake/snake.py b/snake/snake.py index f7abdba..8e49cb7 100644 --- a/snake/snake.py +++ b/snake/snake.py @@ -18,11 +18,15 @@ class Snake(GameObject): def __collides_with_wall(self, obj: GameObject): return isinstance(obj, Wall) and self.get_bounding_boxes()[0].collidelist(obj.get_bounding_boxes()) > -1 - + + + def __collides_with_self(self, obj: GameObject): + return isinstance(obj, Snake) and self.get_bounding_boxes()[0].collidelist(obj.get_bounding_boxes()[1:]) > -1 + def __update_on_collision(self, game_objs: list[GameObject]) -> None: for obj in game_objs: - if self.__collides_with_wall(obj): + if self.__collides_with_wall(obj) or self.__collides_with_self(obj): self.__is_dead = True @@ -34,11 +38,12 @@ class Snake(GameObject): if not self.__is_dead: self.__update_on_collision(game_objs) - self.__state_machine.update(user_input) - 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.__is_dead: + self.__state_machine.update(user_input) + new_head = self.__state_machine.get_state().get_next_head(self.__segments[0]) + + self.__segments.insert(0, new_head) + 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