refactor(game): pause

This commit is contained in:
Kristofers Solo 2024-01-15 22:39:39 +02:00
parent 68452de415
commit 4eed4a18e9
3 changed files with 22 additions and 29 deletions

View File

@ -64,6 +64,10 @@ class Game(BaseScreen):
self.music.set_volume(0) self.music.set_volume(0)
self.tetris.mute() self.tetris.mute()
def pause(self) -> None:
"""Pause the game."""
self.tetris.pause()
def _initialize_game_components(self) -> None: def _initialize_game_components(self) -> None:
"""Initialize game-related components.""" """Initialize game-related components."""
self.clock = pygame.time.Clock() self.clock = pygame.time.Clock()

View File

@ -8,6 +8,7 @@ from utils import CONFIG, GameMode, read_settings
from .base import BaseScreen, SceenElement, TextScreen from .base import BaseScreen, SceenElement, TextScreen
from .button import Button from .button import Button
from .game import Game from .game import Game
from .tetris import get_keys
class Main(BaseScreen, SceenElement, TextScreen): class Main(BaseScreen, SceenElement, TextScreen):
@ -45,8 +46,10 @@ class Main(BaseScreen, SceenElement, TextScreen):
if event.type == pygame.QUIT: if event.type == pygame.QUIT:
self.exit() self.exit()
elif event.type == pygame.KEYDOWN: elif event.type == pygame.KEYDOWN:
if event.key in [pygame.key.key_code(key) for key in self.settings["General"]["quit"]]: if event.key in get_keys(self.settings["General"]["quit"]):
self.exit() self.exit()
elif event.key in get_keys(self.settings["General"]["pause"]) and self.game:
self.game.pause()
if not self.game: if not self.game:
for button in self.buttons: for button in self.buttons:

View File

@ -95,7 +95,6 @@ class Tetris(BaseScreen):
self._handle_rotation_keys() self._handle_rotation_keys()
self._handle_down_key() self._handle_down_key()
self._handle_drop_key() self._handle_drop_key()
self._handle_pause_key()
def move_down(self) -> bool: def move_down(self) -> bool:
""" """
@ -415,11 +414,11 @@ class Tetris(BaseScreen):
See `settings.toml` for the default key bindings. See `settings.toml` for the default key bindings.
""" """
right_keys = _get_keys(self.settings["Movement"]["right"]) right_keys = get_keys(self.settings["Movement"]["right"])
right_key_pressed = _is_key_pressed(right_keys) right_key_pressed = is_key_pressed(right_keys)
left_keys = _get_keys(self.settings["Movement"]["left"]) left_keys = get_keys(self.settings["Movement"]["left"])
left_key_pressed = _is_key_pressed(left_keys) left_key_pressed = is_key_pressed(left_keys)
if not self.timers.horizontal.active: if not self.timers.horizontal.active:
if left_key_pressed: if left_key_pressed:
@ -436,11 +435,11 @@ class Tetris(BaseScreen):
See `settings.toml` for the default key bindings. See `settings.toml` for the default key bindings.
""" """
cw_keys = _get_keys(self.settings["Rotation"]["cw"]) cw_keys = get_keys(self.settings["Rotation"]["cw"])
cw_key_pressed = _is_key_pressed(cw_keys) cw_key_pressed = is_key_pressed(cw_keys)
ccw_keys = _get_keys(self.settings["Rotation"]["ccw"]) ccw_keys = get_keys(self.settings["Rotation"]["ccw"])
ccw_key_pressed = _is_key_pressed(ccw_keys) ccw_key_pressed = is_key_pressed(ccw_keys)
if not self.timers.rotation.active: if not self.timers.rotation.active:
if cw_key_pressed: if cw_key_pressed:
@ -457,8 +456,8 @@ class Tetris(BaseScreen):
See `settings.toml` for the default key bindings. See `settings.toml` for the default key bindings.
""" """
down_keys = _get_keys(self.settings["Movement"]["down"]) down_keys = get_keys(self.settings["Movement"]["down"])
down_key_pressed = _is_key_pressed(down_keys) down_key_pressed = is_key_pressed(down_keys)
if not self.down_pressed and down_key_pressed: if not self.down_pressed and down_key_pressed:
self.down_pressed = True self.down_pressed = True
self.timers.vertical.duration = self.increased_block_speed self.timers.vertical.duration = self.increased_block_speed
@ -473,26 +472,13 @@ class Tetris(BaseScreen):
See `settings.toml` for the default key bindings. See `settings.toml` for the default key bindings.
""" """
drop_keys = _get_keys(self.settings["Action"]["drop"]) drop_keys = get_keys(self.settings["Action"]["drop"])
drop_key_pressed = _is_key_pressed(drop_keys) drop_key_pressed = is_key_pressed(drop_keys)
if not self.timers.drop.active and drop_key_pressed: if not self.timers.drop.active and drop_key_pressed:
self.drop() self.drop()
self.timers.drop.activate() self.timers.drop.activate()
def _handle_pause_key(self) -> None:
"""
Handle the pause key.
See `settings.toml` for the default key bindings.
"""
pause_keys = _get_keys(self.settings["General"]["pause"])
pause_key_pressed = _is_key_pressed(pause_keys)
if pause_key_pressed and not self.timers.horizontal.active:
self.pause()
self.timers.horizontal.activate()
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()
@ -522,12 +508,12 @@ class Tetris(BaseScreen):
) )
def _get_keys(keys: dict[str, str]) -> list[int]: def get_keys(keys: dict[str, str]) -> list[int]:
"""Get the key codes for the specified keys.""" """Get the key codes for the specified keys."""
return [pygame.key.key_code(key) for key in keys] return [pygame.key.key_code(key) for key in keys]
def _is_key_pressed(keys: list[int]) -> bool: def is_key_pressed(keys: list[int]) -> bool:
"""Check if any of the specified keys is pressed.""" """Check if any of the specified keys is pressed."""
keys_pressed = pygame.key.get_pressed() keys_pressed = pygame.key.get_pressed()
return any(keys_pressed[key] for key in keys) return any(keys_pressed[key] for key in keys)