from .enums import PlayerDirection, Colors from maze import Maze import pygame import math class ActorPacman: def __init__(self, scr, center, start_location = (0, 0), maze = None): self.screen = scr self.direction = PlayerDirection.DirectionRight self.speed = 2 self.x, self.y = center self.radius = 12 self.mouth_angle_deg = 45 self.min_mouth_deg = 5 self.max_mouth_deg = 45 self.animate_speed = 2 self.mouth_closing = False self.location = list(start_location) self.maze = maze def update(self): self.animate() def animate(self): if self.mouth_closing: self.mouth_angle_deg -= self.animate_speed if self.mouth_angle_deg <= self.min_mouth_deg: self.mouth_angle_deg = self.min_mouth_deg self.mouth_closing = False else: self.mouth_angle_deg += self.animate_speed if self.mouth_angle_deg >= self.max_mouth_deg: self.mouth_angle_deg = self.max_mouth_deg self.mouth_closing = True #self.x = max(self.radius, min(self.x, 400 - self.radius)) #self.y = max(self.radius, min(self.y, 400 - self.radius)) def draw(self): mouth_angle = math.radians(self.mouth_angle_deg) center = (self.x, self.y) rotation_offset = math.radians(self.direction.value) start_angle = mouth_angle / 2 + rotation_offset end_angle = 2 * math.pi - mouth_angle / 2 + rotation_offset points = [center] angle = start_angle while angle <= end_angle: x = center[0] + self.radius * math.cos(angle) y = center[1] + self.radius * math.sin(angle) points.append((x, y)) angle += math.radians(1) pygame.draw.polygon(self.screen, Colors.Yellow.value, points) def move_right(self): for _ in range(16): self.x += self.speed self.location[0] += 1 if self.location[0] > 28: self.location[0] = 0 self.x = 16 def move_left(self): for _ in range(16): self.x -= self.speed self.location[0] -= 1 if self.location[0] < 0: self.location[0] = 28 self.x = (32 * 29) - 16 def move_up(self): for _ in range(16): self.y -= self.speed self.location[1] -= 1 if self.location[1] < 0: self.location[1] = 32 self.y = (32 * 30) + 48 def move_down(self): for _ in range(16): self.y += self.speed self.location[1] += 1 if self.location[1] > 32: self.location[1] = 0 self.y = 48 def set_direction(self, dir: PlayerDirection): self.direction = dir