From 4cd6b606f3308983b3477d4f5d8dab6b33f4ba83 Mon Sep 17 00:00:00 2001 From: Giovani Date: Thu, 10 Jun 2021 18:25:54 -0400 Subject: [PATCH] feat: add soft drop and exit on full well --- Tetris.py | 25 ++++++++++++++++++++----- config.yaml | 2 ++ entity/Piece.py | 25 +++++++++++++------------ util/ControlsManger.py | 0 4 files changed, 35 insertions(+), 17 deletions(-) create mode 100644 util/ControlsManger.py diff --git a/Tetris.py b/Tetris.py index 28f0b19..e2ad5d5 100644 --- a/Tetris.py +++ b/Tetris.py @@ -41,6 +41,8 @@ class Tetris: pygame.display.set_caption(win_title) pygame.display.set_icon(loaded_icon) + self.is_pressing_down = False # TODO move into control util later + main_music_file = ConfigurationManager.configuration["sound"]["main-music"] self.main_music.set_volume(0.7) # TODO add volume to the config self.main_music.play(mixer.Sound(main_music_file), -1) @@ -54,6 +56,9 @@ class Tetris: self.current_piece.update(elapsed_time, self) else: self.current_piece = PieceGenerator.get_piece((360, 100)) # TODO calculate spawn position + if self.stack and self.current_piece.collide(self.stack): + pygame.quit() + sys.exit() if self.stack: self.stack.update(elapsed_time) @@ -84,11 +89,21 @@ class Tetris: if self.stack and self.current_piece.collide(self.stack): self.current_piece.revert() if event.key == pygame.K_DOWN: - self.current_piece.move((0, self.tile_size)) - if self.well and self.current_piece.collide(self.well): - self.current_piece.revert() - if self.stack and self.current_piece.collide(self.stack): - self.current_piece.revert() + self.is_pressing_down = True + if self.current_piece: + self.current_piece.gravity_time = ConfigurationManager.configuration["engine"]["piece-gravity-time"] / 8 + self.current_piece.set_time = ConfigurationManager.configuration["engine"]["piece-gravity-time"] / 8 + if event.type == pygame.KEYUP: + if event.key == pygame.K_DOWN: + self.is_pressing_down = False + if self.current_piece: + self.current_piece.gravity_time = ConfigurationManager.configuration["engine"]["piece-gravity-time"] + self.current_piece.set_time = ConfigurationManager.configuration["engine"]["piece-set-time"] + + if self.is_pressing_down: + if self.current_piece: + self.current_piece.gravity_time = ConfigurationManager.configuration["engine"]["piece-gravity-time"] / 8 + self.current_piece.set_time = ConfigurationManager.configuration["engine"]["piece-set-time"] / 8 def draw(self) -> None: diff --git a/config.yaml b/config.yaml index d416c8d..248c647 100644 --- a/config.yaml +++ b/config.yaml @@ -12,6 +12,8 @@ sound: engine: fps: 60 tile-size: 20 + piece-gravity-time: 400 + piece-set-time: 600 color: window-bg: "#000000" diff --git a/entity/Piece.py b/entity/Piece.py index ef52a83..1c3d038 100644 --- a/entity/Piece.py +++ b/entity/Piece.py @@ -11,16 +11,17 @@ from util.ConfigurationManager import ConfigurationManager https://tetris.fandom.com/wiki/Tetromino ''' class Piece(Entity): - - GRAVITY = 300 # A move down every 300 ms - PIECE_SET = 750 def __init__(self, shape: Tuple, position: Tuple, color: str, inner_border_color: str, border_color: str): super().__init__(self.__get_points(shape, position), color, border_color) + self.inner_border_color = inner_border_color self.center = self.__get_center(shape, position) + self.gravity_time = ConfigurationManager.configuration["engine"]["piece-gravity-time"] + self.current_gravity_time = 0 + self.set_time = ConfigurationManager.configuration["engine"]["piece-set-time"] + self.current_set_time = 0 self.piece_set_sound = mixer.Channel(2) - self.piece_set_time = 0 self.previous_points = None self.previous_center = None @@ -32,20 +33,20 @@ class Piece(Entity): stack = tetris.stack tile_size = ConfigurationManager.configuration["engine"]["tile-size"] - if self.elapsed_time >= Piece.GRAVITY and self.piece_set_time == 0: - self.elapsed_time -= Piece.GRAVITY + if self.elapsed_time >= self.gravity_time and self.current_set_time == 0: + self.elapsed_time = 0 self.move((0, tile_size)) if well and self.collide(well) or stack and self.collide(stack): self.revert() - self.piece_set_time += elapsed_time + self.current_set_time += elapsed_time - if self.piece_set_time > 0: - self.piece_set_time += elapsed_time - - if self.piece_set_time >= Piece.PIECE_SET: + if self.current_set_time > 0: + self.current_set_time += elapsed_time + + if self.current_set_time >= self.set_time: self.__play_piece_set_sound() - self.piece_set_time = 0 + self.current_set_time = 0 stack.add_piece(self) tetris.current_piece = None diff --git a/util/ControlsManger.py b/util/ControlsManger.py new file mode 100644 index 0000000..e69de29