Update actors/ghost.py
This commit is contained in:
@@ -1,5 +1,36 @@
|
|||||||
from .enums import GhostDirection
|
import pygame
|
||||||
|
from enums import GhostColor, GhostMode
|
||||||
|
|
||||||
class ActorGhost:
|
class ActorGhost(pygame.sprite.Sprite):
|
||||||
def __init__(self):
|
def __init__(self, name, color_enum, position, speed):
|
||||||
pass
|
super().__init__()
|
||||||
|
self.name = name
|
||||||
|
self.color = color_enum.value
|
||||||
|
self.image = pygame.Surface((16, 16))
|
||||||
|
self.image.fill(self.color)
|
||||||
|
self.rect = self.image.get_rect(center=position)
|
||||||
|
self.speed = speed
|
||||||
|
self.direction = pygame.Vector2(1, 0)
|
||||||
|
self.mode = GhostMode.SCATTER
|
||||||
|
self.home_position = position
|
||||||
|
|
||||||
|
def update(self, maze):
|
||||||
|
new_pos = self.rect.move(self.direction.x * self.speed, self.direction.y * self.speed)
|
||||||
|
if not maze.is_wall(new_pos.center):
|
||||||
|
self.rect = new_pos
|
||||||
|
else:
|
||||||
|
self.change_direction(maze)
|
||||||
|
|
||||||
|
def change_direction(self, maze):
|
||||||
|
import random
|
||||||
|
directions = [pygame.Vector2(1, 0), pygame.Vector2(-1, 0),
|
||||||
|
pygame.Vector2(0, 1), pygame.Vector2(0, -1)]
|
||||||
|
random.shuffle(directions)
|
||||||
|
for d in directions:
|
||||||
|
test_pos = self.rect.move(d.x * self.speed, d.y * self.speed)
|
||||||
|
if not maze.is_wall(test_pos.center):
|
||||||
|
self.direction = d
|
||||||
|
break
|
||||||
|
|
||||||
|
def set_mode(self, mode: GhostMode):
|
||||||
|
self.mode = mode
|
Reference in New Issue
Block a user