44 lines
1.8 KiB
Python
44 lines
1.8 KiB
Python
import math
|
|
import time
|
|
|
|
from Ghost import Ghost
|
|
from Vec import Vec
|
|
|
|
|
|
class Clyde(Ghost):
|
|
def __init__(self, start_position: Vec, start_size: Vec, cell_count,
|
|
grid_cell_size, player, maze_grid, start_delay):
|
|
super().__init__(start_position, start_size, cell_count, grid_cell_size, player, maze_grid, start_delay)
|
|
|
|
self.idle_points = [Vec(12, 12), Vec(17, 12), Vec(17, 15), Vec(12, 15)]
|
|
self.idle_index = 0
|
|
|
|
# Aktiviert den Idle-Mode von Clyde:
|
|
# Er begibt sich zurück in das Haus und läuft dort im Kreis.
|
|
def idle(self):
|
|
self.move_to_point(self.idle_points[self.idle_index])
|
|
if abs(self.idle_points[self.idle_index].mul_ret(self.grid_cell_size).distance(self.position)) <= self.speed:
|
|
self.idle_index += 1
|
|
if self.idle_index > 3:
|
|
self.idle_index = 0
|
|
|
|
# Aktiviert den Hunting-Mode von Clyde:
|
|
# Solange der Spieler mehr als 2 Felder von Clyde entfernt ist
|
|
# bewegt er sich zu der aktuellen Position des Spielers.
|
|
# Ist er näher als 2 Felder hört er auf PacMan zu jagen
|
|
def hunting(self):
|
|
if self.position.distance(self.player.position) > 2.5 * self.grid_cell_size:
|
|
player_pos = Vec(math.floor((self.player.position.x + self.grid_cell_size / 2) / self.grid_cell_size),
|
|
math.floor((self.player.position.y + self.grid_cell_size / 2) / self.grid_cell_size))
|
|
self.move_to_point(player_pos)
|
|
else:
|
|
self.stateChange = time.time()
|
|
self.chase = False
|
|
|
|
# Überschreibt den Timer aus der Ghost-Klasse.
|
|
# Wenn er den Spieler nicht jagt, dann wird self.chase nach 6 Sekunden wieder auf True gesetzt
|
|
def timer(self):
|
|
if not self.chase:
|
|
if time.time() - self.stateChange > 6:
|
|
self.chase = True
|