aboutsummaryrefslogtreecommitdiff
path: root/src/game.py
diff options
context:
space:
mode:
authoromagdy7 <omar.professional8777@gmail.com>2023-04-19 06:07:55 +0200
committeromagdy7 <omar.professional8777@gmail.com>2023-04-19 06:07:55 +0200
commit68f17e149ad49e63b05bb53ced64c74f4a372c4f (patch)
tree7978ef1e000aeb1d066715199b900ba2b62a3a05 /src/game.py
parent4fe339692233290a5d074533b4f4ebea668f8832 (diff)
downloadMacpan-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.py169
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()