From 411db322039e2fe8303a835559f095651051a2d9 Mon Sep 17 00:00:00 2001 From: Lerking Date: Tue, 15 Apr 2025 21:29:09 +0200 Subject: [PATCH] Update actors/ghost.py --- actors/ghost.py | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/actors/ghost.py b/actors/ghost.py index 7775768..0bda1bc 100644 --- a/actors/ghost.py +++ b/actors/ghost.py @@ -1,5 +1,36 @@ -from .enums import GhostDirection +import pygame +from enums import GhostColor, GhostMode -class ActorGhost: - def __init__(self): - pass \ No newline at end of file +class ActorGhost(pygame.sprite.Sprite): + def __init__(self, name, color_enum, position, speed): + super().__init__() + self.name = name + self.color = color_enum.value + self.image = pygame.Surface((16, 16)) + self.image.fill(self.color) + self.rect = self.image.get_rect(center=position) + self.speed = speed + self.direction = pygame.Vector2(1, 0) + self.mode = GhostMode.SCATTER + self.home_position = position + + def update(self, maze): + new_pos = self.rect.move(self.direction.x * self.speed, self.direction.y * self.speed) + if not maze.is_wall(new_pos.center): + self.rect = new_pos + else: + self.change_direction(maze) + + def change_direction(self, maze): + import random + directions = [pygame.Vector2(1, 0), pygame.Vector2(-1, 0), + pygame.Vector2(0, 1), pygame.Vector2(0, -1)] + random.shuffle(directions) + for d in directions: + test_pos = self.rect.move(d.x * self.speed, d.y * self.speed) + if not maze.is_wall(test_pos.center): + self.direction = d + break + + def set_mode(self, mode: GhostMode): + self.mode = mode \ No newline at end of file