aboutsummaryrefslogtreecommitdiff
path: root/src/Ghost.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ghost.py')
-rw-r--r--src/Ghost.py96
1 files changed, 0 insertions, 96 deletions
diff --git a/src/Ghost.py b/src/Ghost.py
deleted file mode 100644
index 668c943..0000000
--- a/src/Ghost.py
+++ /dev/null
@@ -1,96 +0,0 @@
-import math
-from util import get_sprites
-from settings import settings
-import map as Map
-
-class Ghost():
- def __init__(self,sprite_sheet, color, x, y):
- self.x = x
- self.y = y
- self.sprite = get_sprites(sprite_sheet)
- self.color = color
- self.last_move = 3
- self.speed = 3
-
- def in_bounds(self, pos):
- (x, y) = pos
- return (x >= 0) and (y >= 0) and (x < settings.width - 30) and (y < settings.height)
-
- def heuristic(self, next_pos, tx, ty):
- return abs(next_pos[0] - tx) + abs(next_pos[1] - ty)
-
-
- # checks if the current position of pacman is either a dot, big dot or free
- def is_valid(self, maze, x, y):
- is_dot = maze[y][x] == Map.D
- is_big_dot = maze[y][x] == Map.BD
- is_free = maze[y][x] == 0
- return (is_dot or is_free or is_big_dot)
-
-
- # checks collision with pacman and obstacles returns false if there is a collision and true otherwise
- def check_collision(self, nx, ny, gx, gy, maze):
- direct_x = [1, 0, -1, 0, 1, 1, -1, -1]
- direct_y = [0, 1, 0, -1, -1, 1, -1, 1]
-
-
- for i in range(len(direct_x)):
- px = nx + direct_x[i] * 14
- py = ny + direct_y[i] * 14
- x = px // gx
- y = py // gy
- if not self.in_bounds((px, py)) or not self.is_valid(maze, x, y):
- return False
-
- return True
-
-
- def get_next_move(self, pacman, 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
-
- 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), pacman.x, pacman.y)
-
- min_idx = ret.index(min(ret))
- return min_idx
-
-
- def move(self, maze, pacman):
- min_idx = self.get_next_move(pacman, maze)
- dx = [1, 0, -1, 0]
- dy = [0, 1, 0, -1]
- new_dx = dx[min_idx] * self.speed
- new_dy = dy[min_idx] * self.speed
- self.x += new_dx
- self.y += new_dy
- self.last_move = min_idx
-
- def draw(self, screen):
- radius = 30 // 2
- pos = (self.x - radius , self.y - radius)
- if self.last_move == 0:
- screen.blit(self.sprite[2], pos)
- elif self.last_move == 1:
- screen.blit(self.sprite[0], pos)
- elif self.last_move == 2:
- screen.blit(self.sprite[3], pos)
- elif self.last_move == 3:
- screen.blit(self.sprite[1], pos)