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
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
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
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)
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)
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
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
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