Spaces:
Running
Running
| import gradio as gr | |
| import chess | |
| import chess.svg | |
| import numpy as np | |
| # Set up the chessboard and the empty board squares | |
| board = chess.Board() | |
| board_array = np.zeros((8, 8), dtype=np.int8) | |
| # Define the class for the chess pieces | |
| class Piece: | |
| def __init__(self, name, value, icon): | |
| self.name = name | |
| self.value = value | |
| self.icon = icon | |
| # Define the different chess pieces | |
| pieces = [ | |
| Piece("King", 0, chess.svg.King), | |
| Piece("Queen", 9, chess.svg.Queen), | |
| Piece("Rook", 5, chess.svg.Rook), | |
| Piece("Bishop", 3, chess.svg.Bishop), | |
| Piece("Knight", 3, chess.svg.Knight), | |
| Piece("Pawn", 1, chess.svg.Pawn), | |
| ] | |
| # Define the chess moves for each piece | |
| def get_moves(piece, pos): | |
| return piece.icon.get_moves(pos) | |
| # Define the function to update the board | |
| def update_board(board_array, piece, pos, value): | |
| board_array[pos // 8, pos % 8] = value | |
| return board_array | |
| # Define the function to generate the next move | |
| def generate_move(board_array): | |
| for pos in range(64): | |
| if board_array[pos // 8, pos % 8] != 0: | |
| piece = board.piece_at(pos) | |
| moves = piece.get_moves(pos) | |
| for move in moves: | |
| new_pos = board.push(chess.Move(pos, move)) | |
| if new_pos.is_checkmate(): | |
| break | |
| else: | |
| continue | |
| board_array = update_board(board_array, piece, new_pos, 0) | |
| return board_array | |
| def chess(board_array): | |
| board = chess.Board() | |
| while not board.is_game_over(): | |
| moves = [get_moves(piece, pos) for pos in range(64) if board.piece_at(pos) is not None] | |
| moves = [move for move in moves if move != 0] | |
| if len(moves) == 0: | |
| break | |
| move = np.random.choice(moves) | |
| pos = np.where(board_array == move) | |
| value = board_array[pos[0], pos[1]] | |
| board_array = update_board(board_array, piece, pos, value) | |
| return board_array | |
| # Define the Gradio interface | |
| demo = gr.Interface( | |
| fn=chess, | |
| inputs=[ | |
| gr.Image(label="Chessboard", shape=(8, 8), mode="L"), | |
| gr.Slider(min_value=1, max_value=64, step=1, value=2, label="Piece"), | |
| gr.Dropdown(label="Move", items=["Up", "Down", "Left", "Right"]), | |
| ], | |
| outputs=gr.Image(label="Updated Chessboard", shape=(8, 8), mode="L"), | |
| title="Chess", | |
| description="A simple chess app using Python and Gradio", | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() |