ChessBoard / app.py
HFUsman's picture
Create app.py
b6f392c verified
import gradio as gr
import chess
import random
def init_board():
# Initialize a new chess board
board = chess.Board()
return board
def make_move(board, move):
try:
board.push_san(move)
except ValueError:
return "Invalid move. Please try again.", board
def computer_move(board, difficulty):
# Simple random AI for the computer move
legal_moves = list(board.legal_moves)
move = random.choice(legal_moves) # Random move as a simple AI example
board.push(move)
return board
def render_chessboard(board):
# Representing the chessboard as a string for simplicity (you can use libraries for a visual rendering)
return str(board)
def play_game(player_move, game_mode, difficulty):
board = init_board()
response = ""
if game_mode == 'Play with Computer':
if player_move:
response, board = make_move(board, player_move)
if board.is_game_over():
return response + "\nGame Over!", render_chessboard(board)
# Simulate computer move
board = computer_move(board, difficulty)
return response + f"\nComputer Move: {board.peek()}", render_chessboard(board)
elif game_mode == 'Two Player':
player1_move = player_move
if player1_move:
response, board = make_move(board, player1_move)
if board.is_game_over():
return response + "\nGame Over!", render_chessboard(board)
player2_move = input("Player 2 move (e.g., e7e5): ") # Asking Player 2
if player2_move:
response, board = make_move(board, player2_move)
return response, render_chessboard(board)
# Define Gradio UI components
def gradio_interface():
with gr.Blocks() as demo:
gr.Markdown("# 3D Chess Game")
game_mode = gr.Radio(choices=["Play with Computer", "Two Player"], label="Game Mode", value="Play with Computer")
difficulty = gr.Slider(minimum=1, maximum=10, label="Difficulty", value=3)
player_move = gr.Textbox(label="Your move (e.g., e2e4): ")
output_text = gr.Textbox(label="Game Status", interactive=False)
chessboard_output = gr.Textbox(label="Current Board", interactive=False)
# Button for making moves and starting game
play_button = gr.Button("Play Move")
play_button.click(
play_game,
inputs=[player_move, game_mode, difficulty],
outputs=[output_text, chessboard_output]
)
demo.launch()
# Run Gradio app
if __name__ == "__main__":
gradio_interface()