Files
2024-10-29 17:18:30 +01:00

48 lines
1.9 KiB
Python

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