diff options
| author | omagdy7 <omar.professional8777@gmail.com> | 2023-04-19 06:07:55 +0200 |
|---|---|---|
| committer | omagdy7 <omar.professional8777@gmail.com> | 2023-04-19 06:07:55 +0200 |
| commit | 68f17e149ad49e63b05bb53ced64c74f4a372c4f (patch) | |
| tree | 7978ef1e000aeb1d066715199b900ba2b62a3a05 /src/game.py | |
| parent | 4fe339692233290a5d074533b4f4ebea668f8832 (diff) | |
| download | Macpan-68f17e149ad49e63b05bb53ced64c74f4a372c4f.tar.xz Macpan-68f17e149ad49e63b05bb53ced64c74f4a372c4f.zip | |
Renamed some files and did a bit of refactoring
Diffstat (limited to 'src/game.py')
| -rw-r--r-- | src/game.py | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/src/game.py b/src/game.py new file mode 100644 index 0000000..b2ff3b7 --- /dev/null +++ b/src/game.py @@ -0,0 +1,169 @@ +from blinky import Blinky +from clyde import Clyde +from direction import DIRECTION +from inky import Inky +from pinky import Pinky +from player import Player +from settings import settings +import map as Map +import pygame + +WIDTH = settings.width +HEIGHT = settings.height + + +class Game(): + def __init__(self): + self.settings = settings + + def run(self): + # Initialize Pygame + pygame.init() + + # Set the dimensions of the window + screen = pygame.display.set_mode((WIDTH, HEIGHT)) + + # Sprite sheet for pacman + sprite_sheet = pygame.image.load( '../assets/pacman_left_sprite.png').convert_alpha() + + # Sprite sheets for the ghosts + blinky_sprite = pygame.image.load('../assets/blinky.png').convert_alpha() + pinky_sprite = pygame.image.load( '../assets/pinky.png').convert_alpha() + clyde_sprite = pygame.image.load( '../assets/clyde.png').convert_alpha() + inky_sprite = pygame.image.load( '../assets/inky.png').convert_alpha() + + # our beautiful maze + maze = Map.Map() + + # length of the map grid size + TILE_WIDTH = WIDTH // len(maze.maze[0]) + TILE_HEIGHT = HEIGHT // len(maze.maze) + + # Initialize the player and the ghosts + player = Player(sprite_sheet) + blinky = Blinky(blinky_sprite,75, 75) + pinky = Pinky(pinky_sprite, 27 * 30, 30 * 30 + 15) + inky = Inky(inky_sprite, 75, 30 * 30 + 15) + clyde = Clyde(clyde_sprite, 27 * 30 + 15, 75) + + # Set the pacman velocity + dx = 0 + dy = 0 + + # counter used to cycle through pacman sprite animation + counter = 0 + + clock = pygame.time.Clock() + + pygame.mixer.music.load('../assets/sfx/game_start.wav') + siren_sound = pygame.mixer.Sound('../assets/sfx/siren_1.wav') + munch_sound = pygame.mixer.Sound('../assets/sfx/munch_1.wav') + + pygame.mixer.music.play() + siren_sound.play(-1) + running = True + + + # Main game loop + while running: + # setting game fps + clock.tick(settings.fps) + + # counter logic for cycling between pacman different sprites + if counter < 19: + counter += 1 + else: + counter = 0 + + screen.fill((0, 0, 0)) # Clear the screen + + # Temporary values for delta_x and delta_y in the position of pacman + tx = dx + ty = dy + + # Handling events + for event in pygame.event.get(): + if event.type == pygame.QUIT: + running = False + elif event.type == pygame.KEYDOWN: + # Move the circle based on the pressed key + if event.key == pygame.K_w: + player.direction = DIRECTION.UP + ty = -player.speed + tx = 0 # Necssarry to move only horizontal or vertical + elif event.key == pygame.K_s: + player.direction = DIRECTION.DOWN + ty = player.speed + tx = 0 # Necssarry to move only horizontal or vertical + elif event.key == pygame.K_a: + player.direction = DIRECTION.LEFT + tx = -player.speed + ty = 0 # Necssarry to move only horizontal or vertical + elif event.key == pygame.K_d: + player.direction = DIRECTION.RIGHT + tx = player.speed + ty = 0 # Necssarry to move only horizontal or vertical + + keys = pygame.key.get_pressed() + + # Simulates holding the key which adds better playability for pacman + if keys[pygame.K_w]: + player.direction = DIRECTION.UP + ty = -player.speed + tx = 0 + elif keys[pygame.K_s]: + player.direction = DIRECTION.DOWN + ty = player.speed + tx = 0 + elif keys[pygame.K_a]: + player.direction = DIRECTION.LEFT + tx = -player.speed + ty = 0 + elif keys[pygame.K_d]: + player.direction = DIRECTION.RIGHT + tx = player.speed + ty = 0 + + + # if tx and ty doesn't lead to colliding change the current dx and dy to them and other wise + # let pacman move in his previous direction + if player.check_collision(maze, tx, ty, TILE_WIDTH, TILE_HEIGHT): + dx = tx + dy = ty + + if dx < 0: + player.direction = DIRECTION.LEFT + elif dx > 0: + player.direction = DIRECTION.RIGHT + elif dy < 0: + player.direction = DIRECTION.UP + elif dy > 0: + player.direction = DIRECTION.DOWN + + if player.check_collision(maze, dx, dy, TILE_WIDTH, TILE_HEIGHT): + player.x += dx + player.y += dy + + + # Move ghosts + blinky.move(maze.maze, player) + pinky.move(maze.maze, player) + inky.move(maze.maze, player) + clyde.move(maze.maze, player) + + # Draw the map on each frame + maze.draw_map(screen) + + # Draw the player and the ghosts + player.draw(screen, counter) + blinky.draw(screen) + pinky.draw(screen) + inky.draw(screen) + clyde.draw(screen) + + + # Update the screen + pygame.display.flip() + + # Quit Pygame + pygame.quit() |
