Files
PyGame-Pacman/actors/ghost_behaviors.py

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.x, pacman.y), maze)
def pinky_behavior(ghost, pacman, maze):
# Aim 4 tiles ahead of Pac-Man
offset = pacman.x + 128
target = (pacman.x + offset, pacman.y + offset)
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.x).distance_to(ghost.rect.center)
if distance < 100:
return path_toward(ghost, ghost.home_position, maze)
return path_toward(ghost, pacman.x, 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[0], test_pos[1]):
dist = pygame.Vector2(target_pos).distance_to(test_pos.center)
if dist < min_dist:
min_dist = dist
best = d
return best