import streamlit as st import pandas as pd from datetime import datetime def initialize_session_state(): if 'spins_left' not in st.session_state: st.session_state.spins_left = 3 if 'current_tickets' not in st.session_state: st.session_state.current_tickets = 0 if 'high_scores' not in st.session_state: st.session_state.high_scores = pd.DataFrame( columns=['Player', 'Score', 'Date'] ) # Add a dummy score dummy_score = pd.DataFrame({ 'Player': ['Bill'], 'Score': [100], 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M")] }) st.session_state.high_scores = pd.concat([st.session_state.high_scores, dummy_score], ignore_index=True) if 'game_active' not in st.session_state: st.session_state.game_active = True if 'spin_result' not in st.session_state: st.session_state.spin_result = None def submit_score(): player_name = st.session_state.player_name if player_name.strip(): new_score = pd.DataFrame({ 'Player': [player_name], 'Score': [st.session_state.current_tickets], 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M")] }) st.session_state.high_scores = pd.concat([st.session_state.high_scores, new_score], ignore_index=True) st.session_state.high_scores = st.session_state.high_scores.sort_values(by='Score', ascending=False).head(10) # Reset game st.session_state.spins_left = 3 st.session_state.current_tickets = 0 st.session_state.game_active = True st.session_state.player_name = "" # Clear the name after submission st.rerun() def create_spin_wheel_app(): # Initialize session state initialize_session_state() # Set page config st.set_page_config( page_title="Spin the Wheel Game!", page_icon="🎯", layout="wide" ) # Create two columns for layout col1, col2 = st.columns([2, 1]) with col1: st.title("🎯 Spin the Wheel Game!") st.write(f"Spins left: {st.session_state.spins_left} | Current Tickets: {st.session_state.current_tickets}") # HTML and JavaScript code for the spinning wheel html_code = """

""" # Handle spin result components_kwargs = dict(height=600) if st.session_state.game_active: components_kwargs["html"] = html_code else: st.write("Game Over! Submit your score to play again.") st.components.v1.html(**components_kwargs) with col2: st.title("🏆 High Scores") # Display high scores table if not st.session_state.high_scores.empty: st.dataframe( st.session_state.high_scores, hide_index=True, use_container_width=True ) else: st.write("No high scores yet!") # Submit score section if st.session_state.spins_left == 0 and st.session_state.game_active: st.markdown("### Submit Your Score") st.text_input("Enter your name:", key="player_name") st.button("Submit Score", on_click=submit_score, disabled=not st.session_state.get('player_name', '').strip()) # Add instructions st.sidebar.image("p1.png") with st.sidebar.expander("How to Play"): st.write(""" 1. You have 3 spins per game 2. Click the 'SPIN' button in the center of the wheel 3. Collect as many tickets as possible 4. After 3 spins, enter your name and submit your score 5. Try to get on the leaderboard! """) st.sidebar.info("build by darryl") # Handle spin result from JavaScript spin_result = st.session_state.get("spin_result") if st.session_state.spins_left > 0 and st.session_state.game_active and spin_result is not None: st.session_state.current_tickets += int(spin_result) st.session_state.spins_left -= 1 st.session_state.spin_result = None # Clear the spin result if st.session_state.spins_left == 0: st.session_state.game_active = False st.rerun() if __name__ == "__main__": create_spin_wheel_app()