import pygame from actors.enums import Colors, PlayerDirection, PillType from actors.pacman import ActorPacman from actors.ghost import Blinky, Pinky, Inky, Clyde # adjust import path as needed from actors.ghost_mode_controller import GhostModeController from hud import HUD from maze import Maze __version__ = "0.2.6" 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 = (32*29), (32*30)+32 screen = pygame.display.set_mode((screen_width, screen_height)) pygame.display.set_caption("Pac-Man " + __version__) cherry_img = pygame.image.load("assets/cherry.png").convert_alpha() hud = HUD(screen_width, screen_height, cherry_image=cherry_img) maze = Maze("maze/pacman_maze.txt") player = ActorPacman(screen, center=maze.pacman_start, location=maze.pacman_location) ghost_mode_controller = GhostModeController() ghost_home_center = (screen_width // 2, (screen_height) // 2) ghosts = spawn_ghosts(ghost_home_center) clock = pygame.time.Clock() running = True while running: screen.fill(Colors.Black.value) 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: print("Hat has been pressed.") 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 # In your main game loop: hud.draw(screen) maze.draw(screen) player.update(maze) 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()