예제 #1
0
def trapped_piece(puzzle: Puzzle) -> bool:
    for node in puzzle.mainline[1::2][1:]:
        square = node.move.to_square
        captured = node.parent.board().piece_at(square)
        if captured and captured.piece_type != PAWN:
            prev = node.parent
            if prev.move.to_square == square:
                square = prev.move.from_square
            if util.is_trapped(prev.parent.board(), square):
                return True
    return False
예제 #2
0
 def test_trapped(self):
     self.assertFalse(
         util.is_trapped(
             chess.Board("q3k3/7p/8/4N2q/3PP3/4B3/8/4K2R b - - 0 1"),
             parse_square("h5")))
     self.assertTrue(
         util.is_trapped(
             chess.Board("q3k3/7p/8/4N2q/3PP3/4B3/7R/4K2R b - - 0 1"),
             parse_square("h5")))
     self.assertFalse(
         util.is_trapped(
             chess.Board("q3k3/7p/8/4N2b/3PP3/4B3/7R/4K2R b - - 0 1"),
             parse_square("h5")))
     self.assertFalse(
         util.is_trapped(
             chess.Board("4k3/7p/8/4N2q/3PP2p/4B3/8/4K3 b - - 0 1"),
             parse_square("h5")))
     self.assertTrue(
         util.is_trapped(chess.Board("8/3P4/8/4N2b/7p/6N1/8/4K3 b - - 0 1"),
                         parse_square("h5")))