import streamlit as st import chess import chess.svg def main(): st.set_page_config(page_title="Streamlit Chess", layout="wide") st.title("Streamlit Chess") # Initialize the chess board if 'board' not in st.session_state: st.session_state.board = chess.Board() st.session_state.selected_square = None # Create two columns col1, col2 = st.columns([3, 1]) with col1: # Display the chess board svg = chess.svg.board(st.session_state.board, size=700) st.image(svg) # Handle clicks on the board clicked = st.button("Click to select/move") if clicked: handle_click() with col2: # Display game status st.subheader("Game Status") st.write(f"Turn: {'White' if st.session_state.board.turn else 'Black'}") st.write(f"Check: {'Yes' if st.session_state.board.is_check() else 'No'}") st.write(f"Game Over: {'Yes' if st.session_state.board.is_game_over() else 'No'}") if st.session_state.board.is_game_over(): st.write(f"Result: {st.session_state.board.result()}") # Reset button if st.button("Reset Game"): st.session_state.board = chess.Board() st.session_state.selected_square = None st.experimental_rerun() def handle_click(): # Get the mouse position pos = st.experimental_get_query_params().get("pos", [""])[0] if not pos: return # Convert mouse position to chess square x, y = map(int, pos.split(",")) file = int(x * 8 / 700) rank = 7 - int(y * 8 / 700) square = chess.square(file, rank) if st.session_state.selected_square is None: # Select the piece if st.session_state.board.piece_at(square): st.session_state.selected_square = square else: # Try to move the piece move = chess.Move(st.session_state.selected_square, square) if move in st.session_state.board.legal_moves: st.session_state.board.push(move) st.session_state.selected_square = None # Force a rerun to update the board st.experimental_rerun() if __name__ == "__main__": main()