Ejemplo n.º 1
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
Ejemplo n.º 2
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
Ejemplo n.º 3
0
 def promotions(self, color, pos, to_pos):
     promos = []
     promos.append(self.create_move(pos, to_pos, Piece.Knight(color)))
     promos.append(self.create_move(pos, to_pos, Piece.Rook(color)))
     promos.append(self.create_move(pos, to_pos, Piece.Queen(color)))
     promos.append(self.create_move(pos, to_pos, Piece.Bishop(color)))
     return promos
Ejemplo n.º 4
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)
Ejemplo n.º 5
0
def test_check_3():  # Checked by bishop
    board = Board.Board()
    wk = Piece.King([4, 3], "w")
    bb = Piece.Bishop([5, 4], "b")
    board.add_piece(wk)
    board.add_piece(bb)
    assert wk.is_checked(board)
Ejemplo n.º 6
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
Ejemplo n.º 7
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
Ejemplo n.º 8
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