From 137f9338920d06db9c1dda937f489f628ae2c8e4 Mon Sep 17 00:00:00 2001 From: adrienmalin <41926238+adrienmalin@users.noreply.github.com> Date: Sun, 24 Feb 2019 13:51:22 +0100 Subject: [PATCH] Update terminis.py --- terminis/terminis.py | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/terminis/terminis.py b/terminis/terminis.py index fd1c352..656f92b 100644 --- a/terminis/terminis.py +++ b/terminis/terminis.py @@ -57,6 +57,7 @@ class Movement: LEFT = Point(-1, 0) RIGHT = Point(1, 0) DOWN = Point(0, 1) + STILL = Point(0, 0) class Tetromino: @@ -93,35 +94,34 @@ class Tetromino: self.fall_timer = None self.hold_enabled = True - def moved(self, movement, potential_minoes_positions): + def move(self, movement, rotated_minoes_positions=None, lock=False): potential_position = self.position + movement - if self.matrix.shape_fits(potential_position, potential_minoes_positions): + if all( + self.matrix.is_free_cell(potential_position+mino_position) + for mino_position in rotated_minoes_positions or self.minoes_positions + ): self.position = potential_position + if rotated_minoes_positions: + self.minoes_positions = rotated_minoes_positions + self.rotated_last = True + else: + self.rotated_last = False self.postpone_lock() self.matrix.refresh() return True else: - return False - - def move(self, movement, lock=True): - if self.moved(movement, self.minoes_positions): - self.rotated_last = False - return True - else: - if lock and movement == Movement.DOWN: + if lock and rotated_minoes_positions is None and movement == Movement.DOWN: self.locking() return False def rotate(self, direction): - potential_minoes_positions = tuple( + rotated_minoes_positions = tuple( Point(-direction*mino_position.y, direction*mino_position.x) for mino_position in self.minoes_positions ) for rotation_point, liberty_degree in enumerate(self.SUPER_ROTATION_SYSTEM[self.orientation][direction], start=1): - if self.moved(liberty_degree, potential_minoes_positions): - self.minoes_positions = potential_minoes_positions + if self.move(liberty_degree, rotated_minoes_positions): self.orientation = (self.orientation+direction) % 4 - self.rotated_last = True if rotation_point == 5: self.rotation_point_5_used = True return True @@ -157,7 +157,7 @@ class Tetromino: def lock(self): self.lock_timer = None - if not self.matrix.shape_fits(self.position+Movement.DOWN, self.minoes_positions): + if not self.move(Movement.DOWN): if self.fall_timer: self.fall_timer = scheduler.cancel(self.fall_timer) self.matrix.lock(self.t_spin()) @@ -295,12 +295,6 @@ class Matrix(Window): and position.y < self.NB_LINES and not (position.y >= 0 and self.cells[position.y][position.x] is not None) ) - - def shape_fits(self, piece_position, MINOES_POSITIONS): - return all( - self.is_free_cell(piece_position+mino_position) - for mino_position in MINOES_POSITIONS - ) def lock(self, t_spin): for mino_position in self.piece.minoes_positions: @@ -643,7 +637,7 @@ class Game: def start_piece(self): self.matrix.piece.position = Matrix.PIECE_POSITION - if self.matrix.shape_fits(self.matrix.piece.position, self.matrix.piece.minoes_positions): + if self.matrix.piece.move(Movement.STILL, lock=False): self.matrix.piece.fall_timer = scheduler.enter(Tetromino.fall_delay, 2, self.matrix.piece.fall, tuple()) self.matrix.refresh() else: