mirror of
https://github.com/kristoferssolo/Tetris.git
synced 2025-10-21 20:00:35 +00:00
feat(game): add drop option
This commit is contained in:
parent
ac46665dca
commit
b4157ef8b0
@ -56,6 +56,7 @@ class Game:
|
|||||||
self._initialize_game_state()
|
self._initialize_game_state()
|
||||||
self._initialize_timers()
|
self._initialize_timers()
|
||||||
self.timers: Timers
|
self.timers: Timers
|
||||||
|
self._initialize_sound()
|
||||||
|
|
||||||
def run(self) -> None:
|
def run(self) -> None:
|
||||||
"""Run a single iteration of the game loop."""
|
"""Run a single iteration of the game loop."""
|
||||||
@ -82,6 +83,7 @@ class Game:
|
|||||||
self._handle_movement_keys(keys)
|
self._handle_movement_keys(keys)
|
||||||
self._handle_rotation_keys(keys)
|
self._handle_rotation_keys(keys)
|
||||||
self._handle_down_key(keys)
|
self._handle_down_key(keys)
|
||||||
|
self._handle_drop_key(keys)
|
||||||
|
|
||||||
def move_down(self) -> None:
|
def move_down(self) -> None:
|
||||||
"""Move the current tetromino down."""
|
"""Move the current tetromino down."""
|
||||||
@ -266,7 +268,6 @@ class Game:
|
|||||||
self.level = 1
|
self.level = 1
|
||||||
self.score = 0
|
self.score = 0
|
||||||
self.lines = 0
|
self.lines = 0
|
||||||
self._initialize_sound()
|
|
||||||
|
|
||||||
def _initialize_sound(self) -> None:
|
def _initialize_sound(self) -> None:
|
||||||
"""Initialize game sounds."""
|
"""Initialize game sounds."""
|
||||||
@ -299,10 +300,9 @@ class Game:
|
|||||||
self.timers.horizontal.activate()
|
self.timers.horizontal.activate()
|
||||||
|
|
||||||
def _handle_rotation_keys(self, keys: list[bool]) -> None:
|
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 = (
|
rotate_keys = (
|
||||||
keys[pygame.K_SPACE]
|
keys[pygame.K_r]
|
||||||
or keys[pygame.K_r]
|
|
||||||
or keys[pygame.K_UP]
|
or keys[pygame.K_UP]
|
||||||
or keys[pygame.K_w]
|
or keys[pygame.K_w]
|
||||||
or keys[pygame.K_k]
|
or keys[pygame.K_k]
|
||||||
@ -323,6 +323,13 @@ class Game:
|
|||||||
self.down_pressed = False
|
self.down_pressed = False
|
||||||
self.timers.vertical.duration = self.initial_block_speed
|
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:
|
def _reset_game_state(self) -> None:
|
||||||
"""Reset the game state."""
|
"""Reset the game state."""
|
||||||
self.sprites.empty()
|
self.sprites.empty()
|
||||||
|
|||||||
@ -16,7 +16,6 @@ class Preview:
|
|||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self._initialize_surface()
|
self._initialize_surface()
|
||||||
self._initialize_rect()
|
self._initialize_rect()
|
||||||
|
|
||||||
self._initialize_increment_height()
|
self._initialize_increment_height()
|
||||||
|
|
||||||
def run(self, next_figures: list[Figure]) -> None:
|
def run(self, next_figures: list[Figure]) -> None:
|
||||||
|
|||||||
@ -84,6 +84,12 @@ class Tetromino:
|
|||||||
if self._are_new_positions_valid(new_positions):
|
if self._are_new_positions_valid(new_positions):
|
||||||
self._update_block_positions(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(
|
def _check_vertical_collision(
|
||||||
self, blocks: list[Block], direction: Direction
|
self, blocks: list[Block], direction: Direction
|
||||||
) -> bool:
|
) -> bool:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user