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