From b4157ef8b07f99b4452e68a3264e56d26830816c Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Thu, 4 Jan 2024 17:19:55 +0200 Subject: [PATCH] feat(game): add drop option --- src/game/game.py | 15 +++++++++++---- src/game/preview.py | 1 - src/game/tetromino.py | 6 ++++++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/game/game.py b/src/game/game.py index c93c2b9..64e1b1c 100644 --- a/src/game/game.py +++ b/src/game/game.py @@ -56,6 +56,7 @@ class Game: self._initialize_game_state() self._initialize_timers() self.timers: Timers + self._initialize_sound() def run(self) -> None: """Run a single iteration of the game loop.""" @@ -82,6 +83,7 @@ class Game: self._handle_movement_keys(keys) self._handle_rotation_keys(keys) self._handle_down_key(keys) + self._handle_drop_key(keys) def move_down(self) -> None: """Move the current tetromino down.""" @@ -266,7 +268,6 @@ class Game: self.level = 1 self.score = 0 self.lines = 0 - self._initialize_sound() def _initialize_sound(self) -> None: """Initialize game sounds.""" @@ -299,10 +300,9 @@ class Game: self.timers.horizontal.activate() def _handle_rotation_keys(self, keys: list[bool]) -> None: - """Handle rotation keys [K_SPACE, K_r, K_UP, K_w, K_k].""" + """Handle rotation keys [K_r, K_UP, K_w, K_k].""" rotate_keys = ( - keys[pygame.K_SPACE] - or keys[pygame.K_r] + keys[pygame.K_r] or keys[pygame.K_UP] or keys[pygame.K_w] or keys[pygame.K_k] @@ -323,6 +323,13 @@ class Game: self.down_pressed = False self.timers.vertical.duration = self.initial_block_speed + def _handle_drop_key(self, keys: list[bool]) -> None: + """Handle the drop key [K_SPACE].""" + drop_keys = keys[pygame.K_SPACE] + + if drop_keys: + self.tetromino.drop() + def _reset_game_state(self) -> None: """Reset the game state.""" self.sprites.empty() diff --git a/src/game/preview.py b/src/game/preview.py index 964d010..74c3180 100644 --- a/src/game/preview.py +++ b/src/game/preview.py @@ -16,7 +16,6 @@ class Preview: def __init__(self) -> None: self._initialize_surface() self._initialize_rect() - self._initialize_increment_height() def run(self, next_figures: list[Figure]) -> None: diff --git a/src/game/tetromino.py b/src/game/tetromino.py index b42fb1b..13f10ef 100644 --- a/src/game/tetromino.py +++ b/src/game/tetromino.py @@ -84,6 +84,12 @@ class Tetromino: if self._are_new_positions_valid(new_positions): self._update_block_positions(new_positions) + def drop(self) -> None: + """Drops the Tetromino to the bottom of the game field.""" + while not self._check_horizontal_collision(self.blocks, Direction.DOWN): + for block in self.blocks: + block.pos.y += 1 + def _check_vertical_collision( self, blocks: list[Block], direction: Direction ) -> bool: