diff options
| author | Moisis <moisis.george@yahoo.com> | 2023-05-09 10:53:08 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-05-09 10:53:08 +0300 |
| commit | 1c409760e93ce1641a7d1bcd5cd09a34ff86fe6b (patch) | |
| tree | a1e9497fe359613f29164c589a499f727ef71d5c /src/player.py | |
| parent | 1c33c06df4d40e708d526cd00d3b8392d931b7c2 (diff) | |
| parent | 439ae67f933ee85bd425566cabac64815db4096e (diff) | |
| download | Macpan-1c409760e93ce1641a7d1bcd5cd09a34ff86fe6b.tar.xz Macpan-1c409760e93ce1641a7d1bcd5cd09a34ff86fe6b.zip | |
Merge branch 'master' into TryatGUI
Diffstat (limited to 'src/player.py')
| -rw-r--r-- | src/player.py | 62 |
1 files changed, 43 insertions, 19 deletions
diff --git a/src/player.py b/src/player.py index 2c4c4f4..92c4a84 100644 --- a/src/player.py +++ b/src/player.py @@ -1,5 +1,5 @@ -from typing import List from direction import DIRECTION +from timer import Timer import map as Map from util import get_sprites import pygame @@ -9,24 +9,34 @@ class Player(): def __init__(self, sprite_sheet): self.x = 30 * 17 - 15 self.y = 30 * 25 - 15 + self.sprite_sheet = sprite_sheet self.sprite = get_sprites(sprite_sheet) self.speed = 6 self.direction = DIRECTION.LEFT + self.powerup = False + self.timer = None # checks if the current position of pacman is either a dot, big dot or free - def is_valid(self,maze, x, y): + def is_valid(self, game_state, x, y): if x >= 0 and x < 30: - is_dot = maze.maze[y][x] == Map.D - is_big_dot = maze.maze[y][x] == Map.BD - is_free = maze.maze[y][x] == 0 + is_dot = game_state.map.maze[y][x] == Map.D + is_big_dot = game_state.map.maze[y][x] == Map.BD + is_free = game_state.map.maze[y][x] == 0 if is_dot or is_big_dot: - maze.maze[y][x] = 0 + game_state.map.maze[y][x] = 0 + game_state.food += 1 + if is_dot: + game_state.score += 10 + if is_big_dot: + self.powerup = True + self.timer = Timer(5 * 1000) + game_state.score += 50 return (is_dot or is_free or is_big_dot) return True - - # checks collision with pacman and obstacles returns false if there is a collision and true otherwise - def check_collision(self, maze, dx, dy, tile_width, tile_height): + # checks collision with pacman and obstacles returns false + # if there is a collision and true otherwise + def check_collision(self, game_state, dx, dy, tile_width, tile_height): direct_x = [1, 0, -1, 0, 1, 1, -1, -1] direct_y = [0, 1, 0, -1, -1, 1, -1, 1] @@ -37,20 +47,34 @@ class Player(): ny = (self.y + ddy) + direct_y[i] * 14 x = nx // tile_width y = ny // tile_height - if not self.is_valid(maze, x, y): + if not self.is_valid(game_state, x, y): return False return True def draw(self, screen, counter): + if self.timer is not None: + elapsed_time = pygame.time.get_ticks() - self.timer.start + if elapsed_time > self.timer.duration: + self.powerup = False + radius = 30 // 2 - pos = (self.x - radius , self.y - radius) - image = pygame.transform.scale(self.sprite[counter // 5], (35, 35)) - if self.direction == DIRECTION.UP: - screen.blit(pygame.transform.rotate(image, 270), pos) - elif self.direction == DIRECTION.DOWN: - screen.blit(pygame.transform.rotate(image, 90), pos) - elif self.direction == DIRECTION.RIGHT: - screen.blit(pygame.transform.flip(image, True, False), pos) - elif self.direction == DIRECTION.LEFT: + pos = (self.x - radius, self.y - radius) + sprite_sheet = [2, 0, 3, 1] + if self.powerup: + self.sprite = get_sprites(pygame.image.load( + '../assets/pacman_as_ghost.png').convert_alpha()) + image = pygame.transform.scale( + self.sprite[sprite_sheet[self.direction.value]], (40, 40)) screen.blit(image, pos) + else: + self.sprite = get_sprites(self.sprite_sheet) + image = pygame.transform.scale(self.sprite[counter // 5], (35, 35)) + if self.direction == DIRECTION.UP: + screen.blit(pygame.transform.rotate(image, 270), pos) + elif self.direction == DIRECTION.DOWN: + screen.blit(pygame.transform.rotate(image, 90), pos) + elif self.direction == DIRECTION.RIGHT: + screen.blit(pygame.transform.flip(image, True, False), pos) + elif self.direction == DIRECTION.LEFT: + screen.blit(image, pos) |
