-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactor game.py to separate event management logic to EventsManager …
…class Separated the event management logic from game.py to a new class called EventsManager. The EventsManager class manages the events in the game, such as mouse clicks and key presses. The code has been updated to be compatible with the new class, and the changes have improved the readability of the code. Additionally, added comments to the game.py file to aid understanding.
- Loading branch information
1 parent
b935456
commit c72862b
Showing
3 changed files
with
131 additions
and
41 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 1,80 @@ | ||
import pygame | ||
from enemy import Mage, Boss | ||
from monster import Monster | ||
|
||
|
||
class EventsManager: | ||
""" | ||
A class responsible for managing events in the game, such as handling user input and managing object interactions. | ||
""" | ||
|
||
__shooting_enemies = (Mage, Boss) | ||
|
||
def __init__(self, window): | ||
self.window = window | ||
self.run = True | ||
|
||
def events(self, level_manager, player): | ||
""" | ||
Process all game events, such as moving characters and handling collisions. | ||
""" | ||
self.handle_enemy_shooting(level_manager, player) | ||
self.handle_enemy_moving(level_manager, player) | ||
self.handle_player_moving(player) | ||
self.handle_collision(level_manager, player) | ||
self.handle_fighting(level_manager, player) | ||
|
||
pygame.display.update() | ||
|
||
def handle_user_input(self, player): | ||
""" | ||
Handle user input events. | ||
""" | ||
for event in pygame.event.get(): | ||
if event.type == pygame.QUIT: | ||
self.run = False | ||
if event.type == pygame.KEYDOWN: | ||
player.shoot(event) | ||
|
||
def get_alive_enemies(self, level_manager): | ||
""" | ||
Get a list of all alive enemies. | ||
""" | ||
return [enemy for enemy in level_manager.get_enemies() if enemy.is_alive] | ||
|
||
def handle_enemy_shooting(self, level_manager, player): | ||
""" | ||
Handle enemy shooting events. | ||
""" | ||
for enemy in self.get_alive_enemies(level_manager): | ||
if isinstance(enemy, self.__shooting_enemies): | ||
enemy.shoot(player) | ||
|
||
def handle_enemy_moving(self, level_manager, player): | ||
""" | ||
Handle enemy movement events. | ||
""" | ||
for enemy in self.get_alive_enemies(level_manager): | ||
enemy.move(target=player.rect) | ||
|
||
def handle_player_moving(self, player): | ||
""" | ||
Handle player movement events based on key presses. | ||
""" | ||
keys_pressed = pygame.key.get_pressed() | ||
player.move(keys=keys_pressed) | ||
|
||
def handle_fighting(self, level_manager, player): | ||
""" | ||
Handle fighting events between the player and enemies. | ||
""" | ||
for enemy in self.get_alive_enemies(level_manager): | ||
player.handle_bullets(enemy=enemy, win=self.window) | ||
enemy.handle_monster_bullets(player=player, win=self.window) | ||
|
||
def handle_collision(self, level_manager, player): | ||
""" | ||
Handle collision events between the player and enemies. | ||
""" | ||
for enemy in self.get_alive_enemies(level_manager): | ||
player.check_collision(enemy, Monster) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters