def detect(matrix: Matrix, piece: Piece) -> bool: if piece.shape.name != "T": return False if piece.last_movement != Movement.rotate: return False piece_grid = piece.get_grid() x = piece.x + piece_grid.x y = piece.y + piece_grid.y matrix_grid = matrix.get_grid() occupied = 0 if matrix_grid[y][x] != 0: occupied += 1 if matrix.width <= x + 2 or matrix_grid[y][x + 2] != 0: occupied += 1 if matrix.height <= y + 2 or matrix_grid[y + 2][x] != 0: occupied += 1 if (matrix.width <= y + 2 or matrix.height <= x + 2 or matrix_grid[y + 2][x + 2] != 0): occupied += 1 return occupied >= 3
def lock(self, piece: Piece) -> bool: grid = piece.get_grid() x = piece.x + grid.x y = piece.y + grid.y if y + grid.height <= self.vanish: return False for my in range(grid.height): for mx in range(grid.width): c = grid.grid[my + grid.y][mx + grid.x] if c != 0: self.grid[y + my][x + mx] = c return True
def collision(self, piece: Piece) -> bool: grid = piece.get_grid() x = piece.x + grid.x y = piece.y + grid.y if x < 0 or x + grid.width > self.width: return True if y + grid.height > self.height + self.vanish: return True for my in range(grid.height): for mx in range(grid.width): c = grid.grid[my + grid.y][mx + grid.x] if c != 0 and self.grid[y + my][x + mx] != 0: return True return False