Files
PyGame-Pacman/pman.py
2025-04-15 21:59:22 +02:00

88 lines
3.1 KiB
Python

import pygame
from actors.enums import Colors, PlayerDirection
from actors.pacman import ActorPacman
from labyrinth import Labyrinth
from actors.ghosts import Blinky, Pinky, Inky, Clyde # adjust import path as needed
__version__ = "0.2.0"
def spawn_ghosts(center_position):
"""
Spawns up to 4 ghosts at the center of the maze ("ghost house").
Args:
center_position (tuple): (x, y) coordinates for spawn point.
Returns:
pygame.sprite.Group: A group containing all ghost instances.
"""
offset = 20 # spread out a little bit inside ghost home
blinky = Blinky((center_position[0] - offset, center_position[1] - offset))
pinky = Pinky((center_position[0] + offset, center_position[1] - offset))
inky = Inky((center_position[0] - offset, center_position[1] + offset))
clyde = Clyde((center_position[0] + offset, center_position[1] + offset))
return pygame.sprite.Group(blinky, pinky, inky, clyde)
def main() -> None:
pygame.init()
screen_width, screen_height = 800, 800
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Pac-Man " + __version__)
labyrinth = Labyrinth(screen, width=screen_width, height=screen_height)
player = ActorPacman(screen, center=(200, 200))
ghost_home_center = (maze_width // 2, maze_height // 2)
ghosts = spawn_ghosts(ghost_home_center)
clock = pygame.time.Clock()
running = True
while running:
screen.fill(Colors.Black)
for event in pygame.event.get():
match event.type:
case pygame.QUIT:
running = False
case pygame.KEYDOWN:
match event.key:
case pygame.K_RIGHT:
player.direction = PlayerDirection.DirectionRight
case pygame.K_LEFT:
player.direction = PlayerDirection.DirectionLeft
case pygame.K_UP:
player.direction = PlayerDirection.DirectionUp
case pygame.K_DOWN:
player.direction = PlayerDirection.DirectionDown
case pygame.JOYHATMOTION:
hat_x, hat_y =event.value
if hat_x == 1:
player.direction = PlayerDirection.DirectionRight
elif hat_x == -1:
player.direction = PlayerDirection.DirectionLeft
elif hat_y == 1:
player.direction = PlayerDirection.DirectionUp
elif hat_y == -1:
player.direction = PlayerDirection.DirectionDown
labyrinth.draw()
player.animate()
player.draw()
ghost_mode_controller.update()
current_mode = ghost_mode_controller.mode
for ghost in ghosts:
ghost.set_mode(current_mode)
ghost.update(maze, pacman)
ghosts.draw(screen)
pygame.display.flip()
clock.tick(60)
pygame.quit()
if __name__ == "__main__":
main()