38 lines
1.4 KiB
Python
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 |