sf-fa5 / app.py
jordonpeter01's picture
Add 2 files
de842f7
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()