Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
    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