From 3962ad4e14a458782bebd82bd2f275ef6f83ecb3 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Thu, 4 Jan 2024 05:36:00 +0200 Subject: [PATCH] feat(game): increase down speed on key press --- src/game/game.py | 38 ++++++++++++++++++++++++++------------ src/game/timer.py | 2 +- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/game/game.py b/src/game/game.py index 19a3f60..7857cd4 100644 --- a/src/game/game.py +++ b/src/game/game.py @@ -30,8 +30,11 @@ class Game: self.field, ) + self.initial_block_speed = CONFIG.game.initial_speed + self.increased_block_speed = self.initial_block_speed * 0.3 + self.down_pressed = False self.timers = Timers( - Timer(CONFIG.game.initial_speed, True, self.move_down), + Timer(self.initial_block_speed, True, self.move_down), Timer(CONFIG.game.movment_delay), Timer(CONFIG.game.rotation_delay), ) @@ -57,27 +60,38 @@ class Game: def handle_event(self) -> None: keys = pygame.key.get_pressed() + left_keys = keys[pygame.K_LEFT] or keys[pygame.K_a] or keys[pygame.K_h] + right_keys = keys[pygame.K_RIGHT] or keys[pygame.K_d] or keys[pygame.K_l] + down_keys = keys[pygame.K_DOWN] or keys[pygame.K_s] or keys[pygame.K_j] + rotate_keys = ( + keys[pygame.K_SPACE] + or keys[pygame.K_r] + or keys[pygame.K_UP] + or keys[pygame.K_w] + or keys[pygame.K_k] + ) + if not self.timers.horizontal.active: - if keys[pygame.K_LEFT] or keys[pygame.K_a] or keys[pygame.K_h]: + if left_keys: self.move_left() self.timers.horizontal.activate() - elif keys[pygame.K_DOWN] or keys[pygame.K_s] or keys[pygame.K_j]: - self.move_down() - elif keys[pygame.K_RIGHT] or keys[pygame.K_d] or keys[pygame.K_l]: + elif right_keys: self.move_right() self.timers.horizontal.activate() if not self.timers.rotation.active: - if ( - keys[pygame.K_SPACE] - or keys[pygame.K_r] - or keys[pygame.K_UP] - or keys[pygame.K_w] - or keys[pygame.K_k] - ): + if rotate_keys: self.tetromino.rotate() self.timers.rotation.activate() + if not self.down_pressed and down_keys: + self.down_pressed = True + self.timers.vertical.duration = self.increased_block_speed + + if self.down_pressed and not down_keys: + self.down_pressed = False + self.timers.vertical.duration = self.initial_block_speed + def move_down(self) -> None: self.tetromino.move_down() diff --git a/src/game/timer.py b/src/game/timer.py index 49bf4fc..e614327 100644 --- a/src/game/timer.py +++ b/src/game/timer.py @@ -6,7 +6,7 @@ from attrs import define, field @define class Timer: - duration: int = field(converter=int) + duration: float = field(converter=float) repeated: bool = field(default=False) func: Optional[Callable[[], None]] = field(default=None) start_time: int = 0