Files
PyGame-Pacman/actors/pacman.py
2025-04-17 21:40:49 +02:00

61 lines
2.2 KiB
Python

from .enums import PlayerDirection, Colors
import pygame
import math
class ActorPacman:
def __init__(self, scr, center):
self.screen = scr
self.direction = PlayerDirection.DirectionRight
self.speed = 3
self.x, self.y = center
self.radius = 10
self.mouth_angle_deg = 45
self.min_mouth_deg = 5
self.max_mouth_deg = 45
self.animate_speed = 2
self.mouth_closing = False
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
match self.direction:
case PlayerDirection.DirectionRight:
self.x += self.speed
case PlayerDirection.DirectionLeft:
self.x -= self.speed
case PlayerDirection.DirectionUp:
self.y -= self.speed
case PlayerDirection.DirectionDown:
self.y += self.speed
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):
pass
def set_direction(self, dir: PlayerDirection):
self.direction = dir