aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoromagdy7 <omar.professional8777@gmail.com>2023-03-20 18:19:31 +0200
committeromagdy7 <omar.professional8777@gmail.com>2023-03-20 18:19:31 +0200
commit87aa85cdbe3bb90705ba5919206f84d7d6bf9a3d (patch)
tree7317c541457527f6ee49e59ccc8d1fb3bf03a253 /src
parent2ff726514a2d97687c258aa68e12bb06dc894552 (diff)
downloadMacpan-87aa85cdbe3bb90705ba5919206f84d7d6bf9a3d.tar.xz
Macpan-87aa85cdbe3bb90705ba5919206f84d7d6bf9a3d.zip
Organized the project in separate files
Diffstat (limited to 'src')
-rw-r--r--src/Direction.py7
-rw-r--r--src/Game.py95
-rw-r--r--src/Player.py48
-rw-r--r--src/macpan.py141
-rw-r--r--src/settings.py7
5 files changed, 161 insertions, 137 deletions
diff --git a/src/Direction.py b/src/Direction.py
new file mode 100644
index 0000000..076a754
--- /dev/null
+++ b/src/Direction.py
@@ -0,0 +1,7 @@
+from enum import Enum
+
+class DIRECTION(Enum):
+ UP = 1
+ DOWN = 2
+ RIGHT = 3
+ LEFT = 4
diff --git a/src/Game.py b/src/Game.py
new file mode 100644
index 0000000..aedfa0c
--- /dev/null
+++ b/src/Game.py
@@ -0,0 +1,95 @@
+import Player
+from Direction import DIRECTION
+import settings as Settings
+import pygame
+
+class Game():
+ def __init__(self):
+ self.settings = Settings.settings
+
+ def init(self):
+ # Initialize Pygame
+ pygame.init()
+
+ # Set the dimensions of the window
+ screen = pygame.display.set_mode((Settings.settings.width, Settings.settings.height))
+
+ # Sprite sheet for pacman
+ sprite_sheet = pygame.image.load('../assets/pacman_left_sprite.png').convert_alpha();
+
+ player = Player.Player(sprite_sheet)
+
+ # Set the circle's velocity
+ dx = 0
+ dy = 0
+
+ # counter used to cycle through pacman sprite animation
+ counter = 0
+
+ clock = pygame.time.Clock()
+
+ # Sprite sheet for pacman
+ sprite_sheet = pygame.image.load('../assets/pacman_left_sprite.png').convert_alpha();
+
+ sprite_width, sprite_height = 32, 32
+
+
+
+ # Checks collision with walls
+ def check_collision(dx, dy):
+ return player.y + sprite_height + dy > Settings.settings.height or player.y + dy < 0 or player.x + sprite_width + dx > Settings.settings.width or player.x + dx < 0
+
+ # Main game loop
+ running = True
+
+
+ while running:
+ # setting game fps
+ clock.tick(Settings.settings.fps)
+
+ # counter logic for cycling between pacman different sprites
+ if counter < 19:
+ counter += 1
+ else:
+ counter = 0
+
+ # 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
+ dy = -player.speed
+ dx = 0 # Necssarry to move only horizontal or vertical
+ elif event.key == pygame.K_s:
+ player.direction = DIRECTION.DOWN
+ dy = player.speed
+ dx = 0 # Necssarry to move only horizontal or vertical
+ elif event.key == pygame.K_a:
+ player.direction = DIRECTION.LEFT
+ dx = -player.speed
+ dy = 0 # Necssarry to move only horizontal or vertical
+ elif event.key == pygame.K_d:
+ player.direction = DIRECTION.RIGHT
+ dx = player.speed
+ dy = 0 # Necssarry to move only horizontal or vertical
+
+
+ # print(player.direction)
+ # Update the circle's position and checking for collisions
+ if not check_collision(dx, dy):
+ player.x += dx
+ player.y += dy
+
+ screen.fill((0, 0, 0)) # Clear the screen
+
+ player.draw(screen, counter)
+
+ # Update the screen
+ pygame.display.flip()
+
+
+ # Quit Pygame
+ pygame.quit()
diff --git a/src/Player.py b/src/Player.py
new file mode 100644
index 0000000..f8ebc06
--- /dev/null
+++ b/src/Player.py
@@ -0,0 +1,48 @@
+from typing import List
+from Direction import DIRECTION
+import pygame
+import settings as Settings
+
+
+def get_sprites(sprite_sheet) -> List:
+ sheet_width, sheet_height = sprite_sheet.get_size()
+ sprite_width, sprite_height = 32, 32
+ rows = sheet_height // sprite_height
+ columns = sheet_width // sprite_width
+ sprites = []
+
+ for row in range(rows):
+ for col in range(columns):
+ x = col * sprite_width
+ y = row * sprite_height
+
+ # Create a new surface for the current sprite and blit it from the sprite sheet onto this new surface
+ new_sprite_surface = pygame.Surface((sprite_width, sprite_height), pygame.SRCALPHA)
+ new_sprite_surface.blit(sprite_sheet, (0, 0), (x, y, x + sprite_width, y +sprite_height))
+
+ # Add this new surface to our list of sprites
+ sprites.append(new_sprite_surface)
+
+ return sprites
+
+
+class Player():
+ def __init__(self, sprite_sheet):
+ self.x = Settings.settings.width // 2;
+ self.y = Settings.settings.height // 2;
+ self.sprite = get_sprites(sprite_sheet)
+ self.speed = 5
+ self.direction = DIRECTION.LEFT
+
+ def draw(self, screen, counter):
+ pos = (self.x, self.y)
+ print(self.direction, DIRECTION.UP)
+ if self.direction == DIRECTION.UP:
+ screen.blit(pygame.transform.rotate(self.sprite[counter // 5], 270), pos)
+ elif self.direction == DIRECTION.DOWN:
+ screen.blit(pygame.transform.rotate(self.sprite[counter // 5], 90), pos)
+ elif self.direction == DIRECTION.RIGHT:
+ screen.blit(pygame.transform.flip(self.sprite[counter // 5], True, False), pos)
+ elif self.direction == DIRECTION.LEFT:
+ screen.blit(self.sprite[counter // 5], pos)
+
diff --git a/src/macpan.py b/src/macpan.py
index e20cfde..93b81b3 100644
--- a/src/macpan.py
+++ b/src/macpan.py
@@ -1,139 +1,6 @@
-from enum import Enum
-import pygame
+import Game
+if __name__ == "__main__":
+ game = Game.Game()
+ game.init()
-
-
-# Initialize Pygame
-pygame.init()
-
-# Set the dimensions of the window
-width, height = 640, 480
-screen = pygame.display.set_mode((width, height))
-
-# Sprite sheet for pacman
-sprite_sheet = pygame.image.load('../assets/pacman_left_sprite.png').convert_alpha();
-
-sheet_width, sheet_height = sprite_sheet.get_size()
-
-sprite_width, sprite_height = 32, 32
-
-rows = sheet_height // sprite_height
-columns = sheet_width // sprite_width
-
-# Set the center position of the circle
-center = [320, 240] # Center of the window
-radius = 0
-
-# Set the circle's velocity
-dx = 0
-dy = 0
-
-# Set the speed of the pacman movement
-speed = 5
-
-
-fps = 60
-
-clock = pygame.time.Clock()
-
-sprites = []
-
-class DIRECTION(Enum):
- UP = 1
- DOWN = 2
- RIGHT = 3
- LEFT = 4
-
-
-
-def get_sprites():
- for row in range(rows):
- for col in range(columns):
- x = col * sprite_width
- y = row * sprite_height
-
- # Create a new surface for the current sprite and blit it from the sprite sheet onto this new surface
- new_sprite_surface = pygame.Surface((sprite_width, sprite_height), pygame.SRCALPHA)
- new_sprite_surface.blit(sprite_sheet, (0, 0), (x, y, x + sprite_width, y +sprite_height))
-
- # Add this new surface to our list of sprites
- sprites.append(new_sprite_surface)
-
-# Checks collision with walls
-def check_collision(pos_x, pos_y, dx, dy):
- # edges of the circle
- # upper_circle_point = circle_center_y
- # lower_circle_point = circle_center_y
- # right_circle_point = circle_center_x
- # left_circle_point = circle_center_x
- print(pos_x, pos_y)
- return pos_y + sprite_height + dy > height or pos_y + dy < 0 or pos_x + sprite_width + dx > width or pos_x + dx < 0
-
-get_sprites()
-
-counter = 0
-
-def draw_player(pos, direction):
- if direction == DIRECTION.UP:
- screen.blit(pygame.transform.rotate(sprites[counter // 5], 270), pos)
- elif direction == DIRECTION.DOWN:
- screen.blit(pygame.transform.rotate(sprites[counter // 5], 90), pos)
- elif direction == DIRECTION.RIGHT:
- screen.blit(sprites[counter // 5], pos)
- elif direction == DIRECTION.LEFT:
- screen.blit(pygame.transform.flip(sprites[counter // 5], True, False), pos)
-
-
-sprite_direction = DIRECTION.LEFT
-
-
-# Main game loop
-running = True
-while running:
- # Handle events
- clock.tick(fps)
-
- if counter < 19:
- counter += 1
- else:
- counter = 0
-
- 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:
- sprite_direction = DIRECTION.UP
- dy = -speed
- dx = 0 # Necssarry to move only horizontal or vertical
- elif event.key == pygame.K_s:
- sprite_direction = DIRECTION.DOWN
- dy = speed
- dx = 0 # Necssarry to move only horizontal or vertical
- elif event.key == pygame.K_a:
- sprite_direction = DIRECTION.RIGHT
- dx = -speed
- dy = 0 # Necssarry to move only horizontal or vertical
- elif event.key == pygame.K_d:
- sprite_direction = DIRECTION.LEFT
- dx = speed
- dy = 0 # Necssarry to move only horizontal or vertical
-
- # Update the circle's position
- if not check_collision(center[0], center[1], dx, dy):
- center[0] += dx
- center[1] += dy
-
- screen.fill((0, 0, 0)) # Clear the screen
-
-
- draw_player(center, sprite_direction)
-
- # Update the screen
- pygame.display.flip()
-
-
-# Quit Pygame
-pygame.quit()
diff --git a/src/settings.py b/src/settings.py
new file mode 100644
index 0000000..ba62736
--- /dev/null
+++ b/src/settings.py
@@ -0,0 +1,7 @@
+class Settings():
+ def __init__(self):
+ self.width = 640
+ self.height = 480
+ self.fps = 60
+
+settings = Settings()