From f32dbaf67a705b47477d55cda58b891896a402fa Mon Sep 17 00:00:00 2001 From: Lerking Date: Tue, 15 Apr 2025 21:38:00 +0200 Subject: [PATCH] Add actors/Behaviors.py --- actors/Behaviors.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 actors/Behaviors.py diff --git a/actors/Behaviors.py b/actors/Behaviors.py new file mode 100644 index 0000000..87da6ce --- /dev/null +++ b/actors/Behaviors.py @@ -0,0 +1,38 @@ +import pygame +import random + +def blinky_behavior(ghost, pacman, maze): + # Simple chase: move toward Pac-Man's position + return path_toward(ghost, pacman.rect.center, maze) + +def pinky_behavior(ghost, pacman, maze): + # Aim 4 tiles ahead of Pac-Man + offset = pacman.direction * 64 + target = (pacman.rect.centerx + offset.x, pacman.rect.centery + offset.y) + return path_toward(ghost, target, maze) + +def inky_behavior(ghost, pacman, maze): + # Placeholder for now: same as Pinky + return pinky_behavior(ghost, pacman, maze) + +def clyde_behavior(ghost, pacman, maze): + # If close to Pac-Man, scatter; otherwise chase + distance = pygame.Vector2(pacman.rect.center).distance_to(ghost.rect.center) + if distance < 100: + return path_toward(ghost, ghost.home_position, maze) + return path_toward(ghost, pacman.rect.center, maze) + +def path_toward(ghost, target_pos, maze): + # Placeholder logic: pick a direction that reduces distance to target + directions = [pygame.Vector2(1, 0), pygame.Vector2(-1, 0), + pygame.Vector2(0, 1), pygame.Vector2(0, -1)] + best = ghost.direction + min_dist = float("inf") + for d in directions: + test_pos = ghost.rect.move(d.x * ghost.speed, d.y * ghost.speed) + if not maze.is_wall(test_pos.center): + dist = pygame.Vector2(target_pos).distance_to(test_pos.center) + if dist < min_dist: + min_dist = dist + best = d + return best \ No newline at end of file