feat(game): increase down speed on key press

This commit is contained in:
Kristofers Solo 2024-01-04 05:36:00 +02:00
parent 3b4865b8a1
commit 3962ad4e14
2 changed files with 27 additions and 13 deletions

View File

@ -30,8 +30,11 @@ class Game:
self.field, 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( 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.movment_delay),
Timer(CONFIG.game.rotation_delay), Timer(CONFIG.game.rotation_delay),
) )
@ -57,27 +60,38 @@ class Game:
def handle_event(self) -> None: def handle_event(self) -> None:
keys = pygame.key.get_pressed() keys = pygame.key.get_pressed()
if not self.timers.horizontal.active: left_keys = keys[pygame.K_LEFT] or keys[pygame.K_a] or keys[pygame.K_h]
if 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]
self.move_left() down_keys = keys[pygame.K_DOWN] or keys[pygame.K_s] or keys[pygame.K_j]
self.timers.horizontal.activate() rotate_keys = (
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]:
self.move_right()
self.timers.horizontal.activate()
if not self.timers.rotation.active:
if (
keys[pygame.K_SPACE] keys[pygame.K_SPACE]
or 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]
): )
if not self.timers.horizontal.active:
if left_keys:
self.move_left()
self.timers.horizontal.activate()
elif right_keys:
self.move_right()
self.timers.horizontal.activate()
if not self.timers.rotation.active:
if rotate_keys:
self.tetromino.rotate() self.tetromino.rotate()
self.timers.rotation.activate() 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: def move_down(self) -> None:
self.tetromino.move_down() self.tetromino.move_down()

View File

@ -6,7 +6,7 @@ from attrs import define, field
@define @define
class Timer: class Timer:
duration: int = field(converter=int) duration: float = field(converter=float)
repeated: bool = field(default=False) repeated: bool = field(default=False)
func: Optional[Callable[[], None]] = field(default=None) func: Optional[Callable[[], None]] = field(default=None)
start_time: int = 0 start_time: int = 0