Files
PyGame-Pacman/actors/Behaviors.py
2025-04-15 21:38:00 +02:00

38 lines
1.4 KiB
Python

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