from github
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
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
|
||||
Reference in New Issue
Block a user