from Ghost import Ghost from Vec import Vec class Pinky(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.current_idle_point = Vec(27, 1) # Aktiviert den Idle-Mode von Pinky: # Er bewegt sich zu seinem definierten Idle-Point. def idle(self): self.move_to_point(self.current_idle_point) # Aktiviert den Hunting-Mode von Pinky: # Er bewegt sich zu der aktuellen Target-Position. def hunting(self): fieldy = self.get_target_position() self.move_to_point(fieldy) # Berechnet das aktuelle Ziel von Pinky: # Es wird der Punkt vier Felder vor PacMan berechnet. # Wenn dieses eine Wand ist, ist das Ziel 3 Felder vor PacMan, # wenn dieses wiederum eine Wand ist 2 Felder, usw. def get_target_position(self): direct = self.player.velocity.get_normalized() fieldy = None if abs(self.player.position.distance(self.position)) <= 4 * self.grid_cell_size: fieldy = self.player.position.mul_ret(1 / self.grid_cell_size).to_int_ret() if fieldy.x >= 30: fieldy.x = 29 if fieldy.x < 0: fieldy.x = 0 else: for i in range(0, 5): fieldy = self.player.position.mul_ret(1 / self.grid_cell_size).add_ret(direct.mul_ret(i)).to_int_ret() if fieldy.x >= 30: fieldy.x = 29 if fieldy.x < 0: fieldy.x = 0 if self.maze_grid[fieldy.x][fieldy.y] == 1: fieldy = self.player.position.mul_ret(1 / self.grid_cell_size).add_ret( direct.mul_ret(i - 1)).to_int_ret() break return fieldy