diff --git a/src/player.py b/src/player.py index 0a58cd9..aa0ee39 100644 --- a/src/player.py +++ b/src/player.py @@ -22,6 +22,9 @@ class Player: self.game_paused = False + self.broken_bones = 0 + self.last_collision_obstacle = None + def update(self, ground_y=80, obstacles=[], items=[], score=0, input_allowed=False): keys = pygame.key.get_pressed() joysticks = [pygame.joystick.Joystick(x) for x in range(pygame.joystick.get_count())] @@ -58,17 +61,28 @@ class Player: # HINDERNISSE-KOLLISION for obs in obstacles: if self.rect.colliderect(obs.get_rect()): - # Prüfen: Spieler kommt von oben und fällt drauf - if self.velocity_y > 0 and self.rect.bottom <= obs.get_rect().top + 10: + if self.velocity_y > 0 and self.rect.bottom - self.velocity_y < obs.get_rect().top: + # Fred landet oben auf der Kiste self.rect.bottom = obs.get_rect().top self.velocity_y = 0 self.on_ground = True + self.last_collision_obstacle = None else: - # Seitliche Kollision - if self.rect.right > obs.get_rect().left and self.rect.left < obs.get_rect().left: - self.rect.right = obs.get_rect().left - elif self.rect.left < obs.get_rect().right and self.rect.right > obs.get_rect().right: - self.rect.left = obs.get_rect().right + # Seitenkollision - Fred wird blockiert UND Knochenbruch zählen + if abs(self.rect.right - obs.get_rect().left) < abs(settings.player.speed): + if self.last_collision_obstacle != obs: + self.broken_bones += 1 + self.last_collision_obstacle = obs + self.rect.right = obs.get_rect().left # WICHTIG: stoppen! + elif abs(self.rect.left - obs.get_rect().right) < abs(settings.player.speed): + if self.last_collision_obstacle != obs: + self.broken_bones += 1 + self.last_collision_obstacle = obs + self.rect.left = obs.get_rect().right # WICHTIG: stoppen! + else: + # Keine Kollision mehr → Reset + if self.last_collision_obstacle == obs: + self.last_collision_obstacle = None # ITEM-KOLLISION for item in items[:]: diff --git a/src/world.py b/src/world.py index 5e7c179..3954b93 100644 --- a/src/world.py +++ b/src/world.py @@ -104,20 +104,25 @@ class World: # PLAYER self.screen.blit(self.player.image, (player_screen_x, self.player.rect.y)) - + + # ANZEIGE font = pygame.font.Font(settings.fonts.PressStart2P, 24) name_surface = font.render(self.player_name, True, (255, 255, 255)) self.screen.blit(name_surface, (20, 20)) + # KNOCHENBRÜCHE + bones_text = font.render(f"Schaden: {self.player.broken_bones}", True, (255, 255, 255)) + self.screen.blit(bones_text, (20, 60)) + current_ticks = pygame.time.get_ticks() elapsed_seconds = (current_ticks - self.start_ticks) // 1000 if not self.level_started: countdown = max(0, settings.world.countdown - elapsed_seconds) - font = pygame.font.Font(settings.fonts.PressStart2P, 72) + font = pygame.font.Font(settings.fonts.PressStart2P, 90) if countdown > 0: - countdown_surface = font.render(str(countdown), True, (255, 255, 255)) + countdown_surface = font.render(str(countdown), True, settings.MyColors.yellow) else: countdown_surface = font.render("GO!", True, (0, 255, 0))