diff options
| author | omagdy7 <omar.professional8777@gmail.com> | 2023-04-16 19:24:24 +0200 |
|---|---|---|
| committer | omagdy7 <omar.professional8777@gmail.com> | 2023-04-16 19:24:24 +0200 |
| commit | 16e402a3a4bd82c0eefe50e31d6613f5f7a99a02 (patch) | |
| tree | 736e22432bee393dab1ea5c99e83e92ff68e642a /src/pinky.py | |
| parent | b673be7fc9e94a5a8245797be6a62547c4efa579 (diff) | |
| download | Macpan-16e402a3a4bd82c0eefe50e31d6613f5f7a99a02.tar.xz Macpan-16e402a3a4bd82c0eefe50e31d6613f5f7a99a02.zip | |
Added code for blinky and pinky
Diffstat (limited to 'src/pinky.py')
| -rw-r--r-- | src/pinky.py | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/pinky.py b/src/pinky.py new file mode 100644 index 0000000..b512bb9 --- /dev/null +++ b/src/pinky.py @@ -0,0 +1,78 @@ +from typing_extensions import override +from Direction import DIRECTION +from settings import settings +import math +from Ghost import Ghost + +class Pinky(Ghost): + def __init__(self, x, y): + super().__init__("pink", x, y) + + + + def in_bounds(self, pos): + return pos[0] >= 0 and pos[1] >= 0 and pos[0] < settings.width and pos[1] < settings.height + + + def get_four_tiles_ahead_of_pacman(self, pacman): + if pacman.direction == DIRECTION.UP: + new_target = (pacman.x - 30 * 4, pacman.y - 30 * 4) + if self.in_bounds(new_target): + return new_target + else: + return (pacman.x, pacman.y) + elif pacman.direction == DIRECTION.DOWN: + new_target = (pacman.x, pacman.y + 30 * 4) + if self.in_bounds(new_target): + return new_target + else: + return (pacman.x, pacman.y) + elif pacman.direction == DIRECTION.RIGHT: + new_target = (pacman.x + 30 * 4, pacman.y) + if self.in_bounds(new_target): + return new_target + else: + return (pacman.x, pacman.y) + elif pacman.direction == DIRECTION.LEFT: + new_target = (pacman.x - 30 * 4, pacman.y) + if self.in_bounds(new_target): + return new_target + else: + return (pacman.x, pacman.y) + + @override + def get_next_move(self, target, maze): + dx = [1, 0, -1, 0] + dy = [0, 1, 0, -1] + + ret = len(dx) * [math.inf] + + forbidden = 0 + + if self.last_move == 0: + forbidden = 2 + if self.last_move == 1: + forbidden = 3 + if self.last_move == 2: + forbidden = 0 + if self.last_move == 3: + forbidden = 1 + + new_target = self.get_four_tiles_ahead_of_pacman(target) + print((target.x, target.y), new_target) + + for i in range(len(dx)): + if i != forbidden: + nx = self.x + dx[i] * self.speed + ny = self.y + dy[i] * self.speed + if self.check_collision(nx, ny, 30, 30, maze): + ret[i] = self.heuristic((nx, ny), new_target) + + min_idx = ret.index(min(ret)) + return min_idx + + + + + + |
