Пример #1
0
    def test_queen_can_take_opponent():
        # Arrange
        board = Board.empty()
        queen = Queen(Player.WHITE)
        square = Square.at(4, 4)
        board.set_piece(square, queen)
        board.set_piece(Square.at(6, 4), Queen(Player.BLACK))

        # Act
        moves = queen.get_available_moves(board)

        # Assert
        assert Square.at(6, 4) in moves
Пример #2
0
    def test_queen_can_move_until_blocked_by_teammate():

        # Arrange
        board = Board.empty()
        queen = Queen(Player.WHITE)
        square = Square.at(4, 4)
        board.set_piece(square, queen)
        board.set_piece(Square.at(6, 4), Queen(Player.WHITE))

        # Act
        moves = queen.get_available_moves(board)

        # Assert
        assert Square.at(6, 4) not in moves
Пример #3
0
    def test_black_queen_cannot_move_if_friendly_piece_in_the_way():
        # Arrange
        board = Board.empty()
        queen = Queen(Player.BLACK)
        queen_square = Square.at(2, 2)
        board.set_piece(queen_square, queen)

        obstructing_square1 = Square.at(1, 1)
        obstructing_square2 = Square.at(3, 3)
        obstructing_square3 = Square.at(1, 3)
        obstructing_square4 = Square.at(3, 1)
        obstructing_square5 = Square.at(2, 1)
        obstructing_square6 = Square.at(2, 3)
        obstructing_square7 = Square.at(1, 2)
        obstructing_square8 = Square.at(3, 2)
        obstruction = Pawn(Player.BLACK)
        board.set_piece(obstructing_square1, obstruction)
        board.set_piece(obstructing_square2, obstruction)
        board.set_piece(obstructing_square3, obstruction)
        board.set_piece(obstructing_square4, obstruction)
        board.set_piece(obstructing_square5, obstruction)
        board.set_piece(obstructing_square6, obstruction)
        board.set_piece(obstructing_square7, obstruction)
        board.set_piece(obstructing_square8, obstruction)

        # Act
        moves = queen.get_available_moves(board)

        # Assert
        assert len(moves) == 0
Пример #4
0
 def handle_promotion(self, moving_piece, to_square):
     if isinstance(moving_piece, Pawn):
         if to_square.row == 0 or to_square.row == 7:
             piece = input(
                 "Select piece to promote pawn to: 'Q', 'K', 'R' or 'B'.")
             if piece == 'Q':
                 self.set_piece(to_square, Queen(self.current_player))
             elif piece == 'K':
                 self.set_piece(to_square, Knight(self.current_player))
             elif piece == 'R':
                 self.set_piece(to_square, Rook(self.current_player))
             elif piece == 'B':
                 self.set_piece(to_square, Bishop(self.current_player))
             else:
                 self.set_piece(to_square, Queen(self.current_player))
     return
    def test_king_cannot_move_to_check_by_queen():
        # Arrange
        board = Board.empty()
        king = King(Player.WHITE)
        king_square = Square.at(2, 3)
        board.set_piece(king_square, king)

        enemy = Queen(Player.BLACK)
        enemy_square = Square.at(1, 2)
        board.set_piece(enemy_square, enemy)

        # Act
        moves = king.get_available_moves(board)
        # check if current square is in check?
        # checked_by = king.get_checked_by(board)

        # Assert
        assert Square.at(1, 2) in moves
        assert Square.at(2, 2) not in moves
        assert Square.at(3, 2) not in moves
        assert Square.at(3, 3) in moves
        assert Square.at(3, 4) not in moves
        assert Square.at(2, 4) in moves
        assert Square.at(1, 4) not in moves
        assert Square.at(1, 3) not in moves
        assert len(moves) == 3
Пример #6
0
    def test_queen_can_move_diagonally():
        # Arrange
        board = Board.empty()
        queen = Queen(Player.WHITE)
        square = Square.at(4, 4)
        board.set_piece(square, queen)

        # Act
        moves = queen.get_available_moves(board)

        # Assert
        assert Square.at(6, 6) in moves
Пример #7
0
 def move_piece(self, from_square, to_square):
     """
     Moves the piece from the given starting square to the given destination square. Also checks for pawn promotion.
     """
     moving_piece = self.get_piece(from_square)
     if moving_piece is not None and moving_piece.player == self.current_player:
         if isinstance(moving_piece, Pawn) and (to_square.row == 0 or to_square.row == 7):
             moving_piece = Queen(self.current_player)  # Pawn promotion mechanic. Automatically promotes to Queen.
         self.set_piece(to_square, moving_piece)
         self.set_piece(from_square, None)
         self.en_passant_deletion(moving_piece, to_square)
         self.set_en_passant_state(to_square, from_square, moving_piece)
         self.current_player = self.current_player.opponent()
    def test_queen_cannot_move_off_board():
        # Arrange
        board = Board.empty()
        queen = Queen(Player.BLACK)
        queen_square = Square.at(4, 4)
        board.set_piece(queen_square, queen)

        # Act
        moves = queen.get_available_moves(board)
        # Assert
        assert Square.at(0, 0) in moves
        assert Square.at(7, 7) in moves
        assert Square.at(8, 8) not in moves
        assert Square.at(-1, -1) not in moves
Пример #9
0
    def test_queens_can_move_right():
        # Arrange
        board = Board.empty()
        queen = Queen(Player.WHITE)
        queen_square = Square.at(3, 4)
        board.set_piece(queen_square, queen)

        # Act
        moves = queen.get_available_moves(board)

        # Assert
        assert Square.at(3, 5) in moves
        assert Square.at(3, 6) in moves
        assert Square.at(3, 7) in moves
Пример #10
0
    def test_black_queen_cannot_move_off_top_of_board():
        # Arrange
        board = Board.empty()
        queen = Queen(Player.BLACK)
        square = Square.at(1, 7)
        board.set_piece(square, queen)

        # Act
        moves = queen.get_available_moves(board)

        # Assert
        assert Square.at(2, 8) not in moves
        assert Square.at(0, 8) not in moves
        assert Square.at(1, 8) not in moves
Пример #11
0
    def test_black_queen_can_move_vertically_and_horizontally():
        # Arrange
        board = Board.empty()
        queen = Queen(Player.BLACK)
        queen_square = Square.at(1, 3)
        board.set_piece(queen_square, queen)

        # Act
        moves = queen.get_available_moves(board)

        # Assert
        assert Square.at(1, 4) in moves
        assert Square.at(4, 3) in moves
        assert Square.at(0, 3) in moves
        assert Square.at(1, 1) in moves
Пример #12
0
    def test_black_queen_can_move_diagonally():
        # Arrange
        board = Board.empty()
        queen = Queen(Player.BLACK)
        queen_square = Square.at(3, 3)
        board.set_piece(queen_square, queen)

        # Act
        moves = queen.get_available_moves(board)

        # Assert
        assert Square.at(4, 4) in moves
        assert Square.at(2, 2) in moves
        assert Square.at(4, 2) in moves
        assert Square.at(2, 4) in moves
    def test_queen_can_move_on_backslash():
        # Arrange
        board = Board.empty()
        queen = Queen(Player.BLACK)
        queen_square = Square.at(4, 4)
        board.set_piece(queen_square, queen)

        # Act
        moves = queen.get_available_moves(board)

        # Assert
        assert Square.at(3, 5) in moves
        assert Square.at(2, 6) in moves
        assert Square.at(5, 3) in moves
        assert Square.at(6, 2) in moves
    def test_queen_can_move_1_vertically():
        # Arrange
        board = Board.empty()
        queen = Queen(Player.BLACK)
        queen_square = Square.at(4, 4)
        board.set_piece(queen_square, queen)

        # Act
        moves = queen.get_available_moves(board)

        # Assert
        assert Square.at(5, 4) in moves
        assert Square.at(6, 4) in moves
        assert Square.at(3, 4) in moves
        assert Square.at(2, 4) in moves
    def test_queen_can_move_horizontally():
        # Arrange
        board = Board.empty()
        queen = Queen(Player.BLACK)
        queen_square = Square.at(4, 4)
        board.set_piece(queen_square, queen)

        # Act
        moves = queen.get_available_moves(board)

        # Assert
        assert Square.at(4, 5) in moves
        assert Square.at(4, 6) in moves
        assert Square.at(4, 3) in moves
        assert Square.at(4, 2) in moves
Пример #16
0
    def test_queens_can_capture_right():
        # Arrange
        board = Board.empty()
        queen = Queen(Player.WHITE)
        queen_square = Square.at(4, 4)
        board.set_piece(queen_square, queen)

        enemy_1 = Pawn(Player.BLACK)
        enemy_1_square = Square.at(4, 6)
        board.set_piece(enemy_1_square, enemy_1)

        # Act
        moves = queen.get_available_moves(board)

        # Assert
        assert Square.at(4, 6) in moves
Пример #17
0
    def test_queens_cannot_move_left_through_pieces():
        # Arrange
        board = Board.empty()
        queen = Queen(Player.WHITE)
        queen_square = Square.at(4, 4)
        board.set_piece(queen_square, queen)

        enemy_1 = Pawn(Player.BLACK)
        enemy_1_square = Square.at(4, 3)
        board.set_piece(enemy_1_square, enemy_1)

        # Act
        moves = queen.get_available_moves(board)

        # Assert
        assert Square.at(4, 2) not in moves
    def test_white_king_checked_by_black_queen_diagonal():
        # Arrange
        board = Board.empty()
        king = King(Player.WHITE)
        king_square = Square.at(2, 3)
        board.set_piece(king_square, king)

        enemy = Queen(Player.BLACK)
        enemy_square = Square.at(1, 2)
        board.set_piece(enemy_square, enemy)

        # Act
        check = king.is_in_check(board)

        # Assert
        assert check is True
    def test_queen_cannot_move_if_piece_in_front():
        # Arrange
        board = Board.empty()
        queen = Queen(Player.WHITE)
        queen_square = Square.at(4, 4)
        board.set_piece(queen_square, queen)

        enemy = Pawn(Player.BLACK)
        enemy_square = Square.at(5, 5)
        board.set_piece(enemy_square, enemy)

        # Act
        moves = queen.get_available_moves(board)

        # Assert
        print(moves)
        assert Square.at(5, 5) in moves
        assert Square.at(6, 6) not in moves
        assert Square.at(7, 7) not in moves
        assert Square.at(2, 2) in moves
Пример #20
0
 def move_piece(self, from_square, to_square):
     """
     Moves the piece from the given starting square to the given destination square.
     """
     moving_piece = self.get_piece(from_square)
     if moving_piece is not None and moving_piece.player == self.current_player:
         if isinstance(moving_piece, Pawn) & (to_square.row == 0
                                              or to_square.row == 7):
             moving_piece = Queen(self.current_player)
         self.handle_castling(from_square, to_square, moving_piece)
         en_passant = False
         if isinstance(moving_piece, Pawn):
             self.handle_en_passant(from_square, to_square)
             if (((to_square.row == 3) & (from_square.row == 1))
                     or ((to_square.row == 4) & (from_square.row == 6))):
                 en_passant = True
         self.set_piece(to_square, moving_piece)
         self.set_piece(from_square, None)
         moving_piece.moved = True
         self.last_move = (moving_piece, to_square, en_passant)
         self.current_player = self.current_player.opponent()
Пример #21
0
    def test_white_queens_can_move_to_all_possible_squares():

        # Arrange
        board = Board.empty()
        queen = Queen(Player.WHITE)
        square = Square.at(1, 4)
        board.set_piece(square, queen)

        # Act
        moves = queen.get_available_moves(board)

        # Assert
        assert set(moves) == set([
            Square.at(0, 3),
            Square.at(0, 4),
            Square.at(0, 5),
            Square.at(1, 0),
            Square.at(1, 1),
            Square.at(1, 2),
            Square.at(1, 3),
            Square.at(1, 5),
            Square.at(1, 6),
            Square.at(1, 7),
            Square.at(2, 3),
            Square.at(2, 4),
            Square.at(2, 5),
            Square.at(3, 2),
            Square.at(3, 4),
            Square.at(3, 6),
            Square.at(4, 1),
            Square.at(4, 4),
            Square.at(4, 7),
            Square.at(5, 0),
            Square.at(5, 4),
            Square.at(6, 4),
            Square.at(7, 4)
        ])
Пример #22
0
    def test_white_queens_can_move_to_all_unoccupied_squares():

        # Arrange
        board = Board.empty()
        queen = Queen(Player.WHITE)
        square = Square.at(1, 4)
        board.set_piece(square, queen)
        team1 = Pawn(Player.WHITE)
        team1_square = Square.at(2, 5)
        board.set_piece(team1_square, team1)
        enemy1 = Pawn(Player.BLACK)
        enemy1_square = Square.at(3, 4)
        board.set_piece(enemy1_square, enemy1)

        # Act
        moves = queen.get_available_moves(board)

        # Assert
        assert set(moves) == set([
            Square.at(0, 3),
            Square.at(0, 4),
            Square.at(0, 5),
            Square.at(1, 0),
            Square.at(1, 1),
            Square.at(1, 2),
            Square.at(1, 3),
            Square.at(1, 5),
            Square.at(1, 6),
            Square.at(1, 7),
            Square.at(2, 3),
            Square.at(2, 4),
            Square.at(3, 2),
            Square.at(3, 4),
            Square.at(4, 1),
            Square.at(5, 0)
        ])
    def test_white_king_not_in_check():
        # Arrange
        board = Board.empty()
        king = King(Player.WHITE)
        king_square = Square.at(2, 3)
        board.set_piece(king_square, king)

        enemy_pawn = Pawn(Player.BLACK)
        enemy_pawn_square = Square.at(3, 3)
        board.set_piece(enemy_pawn_square, enemy_pawn)

        enemy_rook = Rook(Player.BLACK)
        enemy_rook_square = Square.at(3, 4)
        board.set_piece(enemy_rook_square, enemy_rook)

        enemy_bishop = Bishop(Player.BLACK)
        enemy_bishop_square = Square.at(1, 3)
        board.set_piece(enemy_bishop_square, enemy_bishop)

        enemy_knight = Knight(Player.BLACK)
        enemy_knight_square = Square.at(7, 7)
        board.set_piece(enemy_knight_square, enemy_knight)

        enemy_queen = Queen(Player.BLACK)
        enemy_queen_square = Square.at(3, 0)
        board.set_piece(enemy_queen_square, enemy_queen)

        enemy_king = King(Player.BLACK)
        enemy_king_square = Square.at(6, 6)
        board.set_piece(enemy_king_square, enemy_king)

        # Act
        check = king.is_in_check(board)

        # Assert
        assert check is False
Пример #24
0
    def test_queens_cannot_move_off_the_board():
        # Arrange
        board = Board.empty()
        queen = Queen(Player.WHITE)
        queen_square = Square.at(0, 0)
        board.set_piece(queen_square, queen)

        friendly_1 = Pawn(Player.WHITE)
        friendly_1_square = Square.at(1, 0)
        board.set_piece(friendly_1_square, friendly_1)

        friendly_2 = Pawn(Player.WHITE)
        friendly_2_square = Square.at(0, 1)
        board.set_piece(friendly_2_square, friendly_2)

        friendly_3 = Pawn(Player.WHITE)
        friendly_3_square = Square.at(1, 1)
        board.set_piece(friendly_3_square, friendly_3)

        # Act
        moves = queen.get_available_moves(board)

        # Assert
        assert len(moves) == 0
Пример #25
0
 def pawn_promotion_check(self, to_square):
     piece_to_promote = self.get_piece(to_square)
     if isinstance(piece_to_promote, Pawn):
         if piece_to_promote.edge_check_row(to_square):
             self.set_piece(to_square, Queen(self.current_player))
Пример #26
0
 def promotePawn(self, square):
     player = self.current_player
     new_piece = Queen(player)
     self.set_piece(square, new_piece)
Пример #27
0
 def promote_pawn(self):
     last_move = self.move_list[-1]
     if last_move.is_pawn_promotion():
         self.set_piece(last_move.square_to, Queen(self.current_player))