示例#1
0
    def __init__(self):
        self.board = [[None] * 8 for i in range(8)]
        for i in range(8):
            self.board[i][1] = Piece.Pawn(True)
            self.board[i][6] = Piece.Pawn(False)
        self.board[4][0] = Piece.King(True)
        self.board[0][0] = Piece.Rook(True)
        self.board[7][0] = Piece.Rook(True)
        self.board[2][0] = Piece.Bishop(True)
        self.board[5][0] = Piece.Bishop(True)
        self.board[1][0] = Piece.Knight(True)
        self.board[6][0] = Piece.Knight(True)
        self.board[3][0] = Piece.Queen(True)
        self.board[4][7] = Piece.King(False)
        self.board[0][7] = Piece.Rook(False)
        self.board[7][7] = Piece.Rook(False)
        self.board[2][7] = Piece.Bishop(False)
        self.board[5][7] = Piece.Bishop(False)
        self.board[1][7] = Piece.Knight(False)
        self.board[6][7] = Piece.Knight(False)
        self.board[3][7] = Piece.Queen(False)

        self.king_pos = {}
        self.king_pos[True] = (4, 0)
        self.king_pos[False] = (4, 7)

        self.checkmate = False
示例#2
0
def generate_board():
    board = np.zeros((8, 8), dtype=object)
    for y in range(8):
        for x in range(8):
            pos = (x, y)
            if y == 0:
                if x == 0 or x == 7:
                    board[pos] = Piece.Rook(np.array(pos), "white")
                elif x == 1 or x == 6:
                    board[pos] = Piece.Knight(np.array(pos), "white")
                elif x == 2 or x == 5:
                    board[pos] = Piece.Bishop(np.array(pos), "white")
                elif x == 3:
                    board[pos] = Piece.Queen(np.array(pos), "white")
                elif x == 4:
                    board[pos] = Piece.King(np.array(pos), "white")
            elif y == 1:
                board[pos] = Piece.Pawn(np.array(pos), "white")
            elif y == 6:
                board[pos] = Piece.Pawn(np.array(pos), n("white"))
            elif y == 7:
                if x == 0 or x == 7:
                    board[pos] = Piece.Rook(np.array(pos), n("white"))
                elif x == 1 or x == 6:
                    board[pos] = Piece.Knight(np.array(pos), n("white"))
                elif x == 2 or x == 5:
                    board[pos] = Piece.Bishop(np.array(pos), n("white"))
                elif x == 3:
                    board[pos] = Piece.Queen(np.array(pos), n("white"))
                elif x == 4:
                    board[pos] = Piece.King(np.array(pos), n("white"))
            else:
                board[pos] = None
    return board
示例#3
0
def test_en_passant_1():
    board = Board.Board()

    # Kings are needed for check testing when calling valid_moves
    wk = Piece.King([7, 7], "w")
    bk = Piece.King([0, 7], "b")
    board.add_piece(wk)
    board.add_piece(bk)

    wp = Piece.Pawn([2, 1], "w")
    bp = Piece.Pawn([3, 3], "b")
    board.add_piece(wp)
    board.add_piece(bp)
    wp.move([2, 3], board)
    assert [2, 2] in bp.valid_moves(board)
示例#4
0
def test_en_passant_2():
    board = Board.Board()

    # Kings are needed for check testing when calling valid_moves
    wk = Piece.King([7, 7], "w")
    bk = Piece.King([0, 7], "b")
    board.add_piece(wk)
    board.add_piece(bk)

    wp = Piece.Pawn([2, 1], "w")
    bp = Piece.Pawn([3, 3], "b")
    board.add_piece(wp)
    board.add_piece(bp)
    wp.move([2, 3], board)
    wp.clear_passant()  # Clear en passant flag so it can't be taken that way
    assert not [2, 2] in bp.valid_moves(board)
示例#5
0
 def __init__(self, srcFile=None):
     """Initializes the game board according to standard chess rules"""
     if srcFile:
         Board.readFile(srcFile)
         return
     for rank in range(Board.width):  #populate board
         self.board.append([])
         if rank < 4:
             clr = "w"
         else:
             clr = "b"
         for file in range(Board.width):
             if rank in [1, 6]:  #pawns
                 piece = Piece.Pawn(rank, file, clr)
             elif rank in [0, 7]:
                 if file == 0 or file == 7:
                     piece = Piece.Rook(rank, file, clr)
                 elif file == 1 or file == 6:
                     piece = Piece.Knight(rank, file, clr)
                 elif file == 2 or file == 5:
                     piece = Piece.Bishop(rank, file, clr)
                 elif file == 3:
                     piece = Piece.Queen(rank, file, clr)
                 elif file == 4:
                     piece = Piece.King(rank, file, clr)
                     Board.kings[clr] = piece
             else:
                 piece = 'XX'
             self.board[-1].append(piece)
             Board.activePieces[clr].append(piece)
示例#6
0
def test_check_4():  # Checked by pawn
    board = Board.Board()
    wk = Piece.King([4, 3], "w")
    bp = Piece.Pawn([5, 4], "b")
    board.add_piece(wk)
    board.add_piece(bp)
    assert wk.is_checked(board)
示例#7
0
    def readFile(srcFile):
        """ Read in a board state from a csv file and store it in a Board. """
        board = [[] for _ in range(8)]
        with open(srcFile) as f:
            rank = 7
            for line in f:
                print(line)
                # starts with black, which is 7th rank
                if rank < 0:
                    raise ValueError
                    return
                chars = line.split(",")
                this_line = []
                file = 0
                for val in chars:
                    print("   " + str(val))
                    if file > 7:
                        raise ValueError
                        return
                    if val == "XX":
                        this_line.append(val)
                    elif len(val.strip()) == 2:  # name in format bP, wQ, etc
                        pieceType = val[1]
                        clr = val[0]
                        if pieceType == "Q":
                            print("adding" + pieceType + " " + clr)
                            piece = Piece.Queen(rank, file, clr)
                        elif pieceType == "K":
                            piece = Piece.King(rank, file, clr)
                            print("adding" + pieceType + " " + clr)
                        elif pieceType == "R":
                            print("adding" + pieceType + " " + clr)
                            piece = Piece.Rook(rank, file, clr)
                        elif pieceType == "N":
                            print("adding" + pieceType + " " + clr)
                            piece = Piece.Knight(rank, file, clr)
                        elif pieceType == "B":
                            print("adding" + pieceType + " " + clr)
                            piece = Piece.Bishop(rank, file, clr)
                        elif pieceType == "p":
                            print("adding" + pieceType + " " + clr)
                            piece = Piece.Pawn(rank, file, clr)
                    else:
                        raise ValueError("unexpected input format! >:( " +
                                         str(val))
                    this_line.append(piece)
                    file += 1

                board[rank] = this_line
                rank -= 1

        Board.board = board
示例#8
0
    def loadBoard(filename):
        isFirstLine = True
        board = None
        file = open(filename, 'r')

        line = file.readline()
        while (line):
            # get the board dimensions
            if isFirstLine:
                assert (board is None)
                match = DIM_PATTERN.search(line)
                x = int(match.group(1))
                y = int(match.group(2))

                board = Board((x, y))
                isFirstLine = False
            else:  # add a piece to board
                assert (board is not None)
                match = PIECE_PATTERN.search(line)
                pieceName = match.group(1)
                color = Piece.COLORS[int(match.group(2))]
                x = int(match.group(3)) - 1
                y = int(match.group(4)) - 1

                if (pieceName.lower() == "pawn"):
                    newPiece = Piece.Pawn(color, (x, y))
                elif (pieceName.lower() == "knight"):
                    newPiece = Piece.Knight(color, (x, y))
                elif (pieceName.lower() == "bishop"):
                    newPiece = Piece.Bishop(color, (x, y))
                elif (pieceName.lower() == "rook"):
                    newPiece = Piece.Rook(color, (x, y))
                elif (pieceName.lower() == "queen"):
                    newPiece = Piece.Queen(color, (x, y))
                elif (pieceName.lower() == "king"):
                    newPiece = Piece.King(color, (x, y))

                board.addPiece(newPiece)

            line = file.readline()
        return board
board[4][0] = black_queen
'''
game_list = []

for x in range(1):
    board = [[None for x in range(8)] for y in range(8)]

    play_by_play = False

    winner = None
    engine = Engine.Engine()

    engine.white_king = Piece.King(1)
    engine.white_king_pos = (4, 7)

    p1 = Piece.Pawn(1)
    p2 = Piece.Pawn(1)
    p3 = Piece.Pawn(-1)

    white_queen = Piece.Queen(1)
    board[7][4] = engine.white_king
    #board[6][4] = p1
    #board[6][5] = p2
    #board[7][3] = white_queen

    engine.black_king = Piece.King(-1)
    engine.black_king_pos = (4, 0)
    black_queen = Piece.Queen(-1)
    black_rook1 = Piece.Rook(-1)
    board[1][4] = p3
    board[0][4] = engine.black_king
示例#10
0
    def undo_move(self, move, old_piece):
        self.moves_made -= 1
        pos1 = move[0]
        pos2 = move[1]
        piece = move[2]
        identity = move[3]

        if identity[2:] == 'astle':  # castling
            if identity[0] == 'w':
                y = 7
                self.white_king.sub_move()
            else:
                y = 0
                self.black_king.sub_move()
            x2_king = 4

            if identity[1:] == 'castle':
                x1_king = 6
                x2_rook = 7
                x1_rook = 5
                if identity[0] == 'w':
                    self.white_king_pos = (4, 7)
                else:
                    self.black_king_pos = (4, 0)
            else:
                x1_king = 2
                x2_rook = 0
                x1_rook = 3
                if identity[0] == 'w':
                    self.white_king_pos = (4, 7)
                else:
                    self.black_king_pos = (4, 0)

            self.board[y][x2_king] = self.board[y][x1_king]
            self.board[y][x2_rook] = self.board[y][x1_rook]
            self.board[y][x1_king] = None
            self.board[y][x1_rook] = None
            return

        x1 = move[0][0]
        y1 = move[0][1]
        x2 = move[1][0]
        y2 = move[1][1]

        square1 = self.board[y1][x1]
        square2 = self.board[y2][x2]

        if identity == 'promotion':  # pawn promotion
            color = self.board[y2][x2].get_color()
            self.board[y1][x1] = Piece.Pawn(color)
            self.board[y2][x2] = old_piece
            return

        # normal move
        if identity == 'enpassant':  # enpassant
            self.board[y1][x2] = Piece.Pawn(
                self.invert_color(square2.get_color()))
            self.enpassant[x2] = True

        if square2.get_piece() == 'King':  # if moving king
            if square2.get_color() == 1:
                self.white_king_pos = pos1
            else:
                self.black_king_pos = pos1
            square2.sub_move()

        if square2.get_piece() == 'Rook':
            square2.sub_move()

        if square2.get_piece() == 'Pawn':
            if abs(y2 - y1) == 2:
                # self.enpassant[x2] = False
                self.enpassant.pop(x2, None)

        self.board[y1][x1] = square2
        self.board[y2][x2] = old_piece
示例#11
0
    def init_board(self, board=None):
        if board:
            self.board = board
            #Custom board state
        else:
            #Initialize basic chess board
            self.board[6][0] = Piece.Pawn(1)
            self.board[6][1] = Piece.Pawn(1)
            self.board[6][2] = Piece.Pawn(1)
            self.board[6][3] = Piece.Pawn(1)
            self.board[6][4] = Piece.Pawn(1)
            self.board[6][5] = Piece.Pawn(1)
            self.board[6][6] = Piece.Pawn(1)
            self.board[6][7] = Piece.Pawn(1)
            self.white_pawn_arr = []
            for i in self.board[6]:
                self.white_pawn_arr.append(i)

            black_pawn_1 = Piece.Pawn(-1)
            black_pawn_2 = Piece.Pawn(-1)
            black_pawn_3 = Piece.Pawn(-1)
            black_pawn_4 = Piece.Pawn(-1)
            black_pawn_5 = Piece.Pawn(-1)
            black_pawn_6 = Piece.Pawn(-1)
            black_pawn_7 = Piece.Pawn(-1)
            black_pawn_8 = Piece.Pawn(-1)
            self.board[1][0] = black_pawn_1
            self.board[1][1] = black_pawn_2
            self.board[1][2] = black_pawn_3
            self.board[1][3] = black_pawn_4
            self.board[1][4] = black_pawn_5
            self.board[1][5] = black_pawn_6
            self.board[1][6] = black_pawn_7
            self.board[1][7] = black_pawn_8
            self.black_pawn_arr = []
            for i in self.board[1]:
                self.black_pawn_arr.append(i)

            self.white_rook_1 = Piece.Rook(1, 0)
            self.white_rook_2 = Piece.Rook(1, 1)
            self.board[7][0] = self.white_rook_1
            self.board[7][7] = self.white_rook_2

            self.black_rook_1 = Piece.Rook(-1, 0)
            self.black_rook_2 = Piece.Rook(-1, 1)
            self.board[0][0] = self.black_rook_1
            self.board[0][7] = self.black_rook_2

            white_knight_1 = Piece.Knight(1)
            white_knight_2 = Piece.Knight(1)
            self.board[7][1] = white_knight_1
            self.board[7][6] = white_knight_2

            black_knight_1 = Piece.Knight(-1)
            black_knight_2 = Piece.Knight(-1)
            self.board[0][1] = black_knight_1
            self.board[0][6] = black_knight_2

            white_bishop_1 = Piece.Bishop(1)
            white_bishop_2 = Piece.Bishop(1)
            self.board[7][2] = white_bishop_1
            self.board[7][5] = white_bishop_2

            black_bishop_1 = Piece.Bishop(-1)
            black_bishop_2 = Piece.Bishop(-1)
            self.board[0][2] = black_bishop_1
            self.board[0][5] = black_bishop_2

            self.white_king = Piece.King(1)
            self.white_king_pos = (4, 7)
            white_queen = Piece.Queen(1)
            self.board[7][4] = self.white_king
            self.board[7][3] = white_queen

            self.black_king = Piece.King(-1)
            self.black_king_pos = (4, 0)
            black_queen = Piece.Queen(-1)
            self.board[0][4] = self.black_king
            self.board[0][3] = black_queen