48 lines
1.9 KiB
Python
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
|