Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import random | |
| import time | |
| st.set_page_config(page_title="Mini Game Arcade ๐ฎ", layout="centered") | |
| # --- Score Initialization --- | |
| if "score" not in st.session_state: | |
| st.session_state.score = 0 | |
| # --- Selected Game State --- | |
| if "selected_game" not in st.session_state: | |
| st.session_state.selected_game = None | |
| # --- Game List --- | |
| game_list = [ | |
| "Rock Paper Scissors", "Guess the Number", "Word Scramble", "Emoji Quiz", | |
| "Math Quiz", "Coin Toss", "Color Guess", "Yes or No", "Hangman (Short Word)", | |
| "Odd or Even", "Fast Tap Challenge" | |
| ] | |
| # --- App Header --- | |
| st.title("๐ฎ Mini Game Arcade") | |
| st.markdown("Welcome! Choose a game below and earn points! ๐ง โจ") | |
| st.markdown(f"### โญ Score: `{st.session_state.score}`") | |
| if st.button("๐ Reset Score"): | |
| st.session_state.score = 0 | |
| st.success("Score has been reset!") | |
| # --- Game Selector (Cards Style) --- | |
| cols = st.columns(3) | |
| for i, game in enumerate(game_list): | |
| if cols[i % 3].button(game): | |
| st.session_state.selected_game = game | |
| st.divider() | |
| # --- Run Selected Game --- | |
| selected_game = st.session_state.selected_game | |
| if selected_game: | |
| # --- Rock Paper Scissors --- | |
| if selected_game == "Rock Paper Scissors": | |
| st.subheader("โ๐โ Rock Paper Scissors") | |
| user_choice = st.radio("Your Move:", ["Rock", "Paper", "Scissors"]) | |
| if st.button("Play"): | |
| computer = random.choice(["Rock", "Paper", "Scissors"]) | |
| st.write(f"๐ค Computer chose: {computer}") | |
| if user_choice == computer: | |
| st.info("It's a tie!") | |
| elif (user_choice == "Rock" and computer == "Scissors") or \ | |
| (user_choice == "Paper" and computer == "Rock") or \ | |
| (user_choice == "Scissors" and computer == "Paper"): | |
| st.success("You win! +1 point") | |
| st.session_state.score += 1 | |
| else: | |
| st.error("You lose!") | |
| # --- Guess the Number --- | |
| elif selected_game == "Guess the Number": | |
| st.subheader("๐ข Guess the Number") | |
| if "guess_number" not in st.session_state: | |
| st.session_state.guess_number = random.randint(1, 20) | |
| guess = st.number_input("Guess a number between 1 and 20", 1, 20) | |
| if st.button("Submit Guess"): | |
| target = st.session_state.guess_number | |
| if guess == target: | |
| st.success("๐ Correct! +1 point") | |
| st.session_state.score += 1 | |
| del st.session_state.guess_number | |
| elif guess < target: | |
| st.warning("Too low!") | |
| else: | |
| st.warning("Too high!") | |
| st.caption(f"The number was: {target}") | |
| # --- Word Scramble --- | |
| elif selected_game == "Word Scramble": | |
| st.subheader("๐ค Word Scramble") | |
| words = ["cake", "fish", "book", "door", "tree", "milk", "bike", "lamp", "frog", "star"] | |
| if "scramble_word" not in st.session_state: | |
| word = random.choice(words) | |
| scrambled = ''.join(random.sample(word, len(word))) | |
| st.session_state.scramble_word = word | |
| st.session_state.scrambled = scrambled | |
| st.write(f"Unscramble this: `{st.session_state.scrambled}`") | |
| answer = st.text_input("Your Guess") | |
| if st.button("Check Answer"): | |
| if answer.lower() == st.session_state.scramble_word: | |
| st.success("Correct! +1 point") | |
| st.session_state.score += 1 | |
| del st.session_state.scramble_word | |
| del st.session_state.scrambled | |
| else: | |
| st.error(f"Wrong! It was `{st.session_state.scramble_word}`") | |
| # --- Emoji Quiz --- | |
| elif selected_game == "Emoji Quiz": | |
| st.subheader("๐ Emoji Quiz") | |
| emoji_dict = { | |
| "๐๐ฑ": "apple", "๐๐": "study", "๐ฎ๐ง ": "game", "๐โค๏ธ": "pizza", "๐๐ป": "python", | |
| "๐๐จ": "drive", "๐ง๐ถ": "music", "โ๏ธ๐": "travel", "๐๐ช": "exercise", "๐ถ๐พ": "dog", | |
| "๐ด๐๏ธ": "sleep", "๐๐ง": "shopping", "๐ท๐ธ": "camera", "๐บ๐ฌ": "movie", "๐กโก": "idea", | |
| "๐ง๏ธโ": "rain", "๐๐๏ธ": "summer", "๐ ๐จโ๐ฉโ๐งโ๐ฆ": "family", "๐๐": "birthday", "๐๐ฑ": "call" | |
| } | |
| if "emoji_pair" not in st.session_state: | |
| emoji, word = random.choice(list(emoji_dict.items())) | |
| st.session_state.emoji_pair = (emoji, word) | |
| emoji, correct = st.session_state.emoji_pair | |
| st.write(f"What do these emojis mean? {emoji}") | |
| user_ans = st.text_input("Your Answer") | |
| if st.button("Check"): | |
| if user_ans.lower().strip() == correct: | |
| st.success("You're right! +1 point") | |
| st.session_state.score += 1 | |
| else: | |
| st.error(f"Oops, it was: `{correct}`") | |
| del st.session_state.emoji_pair | |
| # --- Math Quiz --- | |
| elif selected_game == "Math Quiz": | |
| st.subheader("โ Math Quiz") | |
| if "math_pair" not in st.session_state: | |
| a, b = random.randint(1, 10), random.randint(1, 10) | |
| st.session_state.math_pair = (a, b) | |
| a, b = st.session_state.math_pair | |
| st.write(f"What is {a} + {b}?") | |
| user_ans = st.number_input("Your Answer", 0) | |
| if st.button("Submit"): | |
| if user_ans == a + b: | |
| st.success("Correct! +1 point") | |
| st.session_state.score += 1 | |
| else: | |
| st.error(f"Wrong! Answer: {a + b}") | |
| del st.session_state.math_pair | |
| # --- Coin Toss --- | |
| elif selected_game == "Coin Toss": | |
| st.subheader("๐ช Coin Toss") | |
| user_call = st.radio("Call it:", ["Heads", "Tails"]) | |
| if st.button("Flip"): | |
| result = random.choice(["Heads", "Tails"]) | |
| st.write(f"๐ช It's {result}!") | |
| if user_call == result: | |
| st.success("You guessed it! +1 point") | |
| st.session_state.score += 1 | |
| else: | |
| st.error("Try again!") | |
| # --- Color Guess --- | |
| elif selected_game == "Color Guess": | |
| st.subheader("๐จ Color Guess") | |
| colors = ["Red", "Blue", "Green", "Yellow", "Purple"] | |
| if "color_ans" not in st.session_state: | |
| st.session_state.color_ans = random.choice(colors) | |
| guess = st.selectbox("Guess the color", colors) | |
| if st.button("Check Color"): | |
| if guess == st.session_state.color_ans: | |
| st.success("Correct! +1 point") | |
| st.session_state.score += 1 | |
| else: | |
| st.warning(f"Nope! It was {st.session_state.color_ans}") | |
| del st.session_state.color_ans | |
| # --- Yes or No --- | |
| elif selected_game == "Yes or No": | |
| st.subheader("โ Yes or No") | |
| question = st.text_input("Ask any yes/no question") | |
| if st.button("Answer"): | |
| response = random.choice(["Yes", "No", "Maybe", "Definitely not", "Probably yes"]) | |
| st.write(f"๐ง Answer: {response}") | |
| st.info("This game doesn't affect your score.") | |
| # --- Hangman --- | |
| elif selected_game == "Hangman (Short Word)": | |
| st.subheader("๐ฏ Hangman") | |
| if 'hangman_word' not in st.session_state: | |
| word = random.choice([ | |
| "fish", "milk", "tree", "door", "cake", "book", "frog", "rain", | |
| "bike", "jump", "lamp", "home", "ring", "desk", "lion", "wolf" | |
| ]) | |
| st.session_state.hangman_word = word | |
| st.session_state.hangman_display = ["_"] * len(word) | |
| st.session_state.hangman_tries = 6 | |
| st.session_state.hangman_guessed = [] | |
| st.write(" ".join(st.session_state.hangman_display)) | |
| st.write(f"๐น๏ธ Tries Left: `{st.session_state.hangman_tries}`") | |
| st.write(f"๐ค Letters guessed: `{', '.join(st.session_state.hangman_guessed)}`") | |
| letter = st.text_input("Guess a letter", max_chars=1) | |
| if st.button("Submit Letter"): | |
| if not letter or not letter.isalpha(): | |
| st.warning("Enter a valid letter.") | |
| elif letter in st.session_state.hangman_guessed: | |
| st.info("Already guessed.") | |
| else: | |
| st.session_state.hangman_guessed.append(letter) | |
| if letter in st.session_state.hangman_word: | |
| for i, l in enumerate(st.session_state.hangman_word): | |
| if l == letter: | |
| st.session_state.hangman_display[i] = letter | |
| st.success("Correct letter!") | |
| else: | |
| st.session_state.hangman_tries -= 1 | |
| st.error("Wrong letter!") | |
| if "_" not in st.session_state.hangman_display: | |
| st.success(f"You guessed it! Word: `{st.session_state.hangman_word}`") | |
| st.session_state.score += 1 | |
| if st.button("Play Again"): | |
| for key in ["hangman_word", "hangman_display", "hangman_tries", "hangman_guessed"]: | |
| del st.session_state[key] | |
| elif st.session_state.hangman_tries == 0: | |
| st.error(f"Game Over! Word was: `{st.session_state.hangman_word}`") | |
| if st.button("Try Again"): | |
| for key in ["hangman_word", "hangman_display", "hangman_tries", "hangman_guessed"]: | |
| del st.session_state[key] | |
| # --- Odd or Even --- | |
| elif selected_game == "Odd or Even": | |
| st.subheader("๐ข Odd or Even") | |
| if "odd_even_number" not in st.session_state: | |
| st.session_state.odd_even_number = random.randint(1, 100) | |
| num = st.session_state.odd_even_number | |
| guess = st.radio(f"Is {num} odd or even?", ["Odd", "Even"]) | |
| if st.button("Check"): | |
| correct = "Even" if num % 2 == 0 else "Odd" | |
| if guess == correct: | |
| st.success("Correct! +1 point") | |
| st.session_state.score += 1 | |
| else: | |
| st.error(f"Nope! It's {correct}") | |
| del st.session_state.odd_even_number | |
| # --- Fast Tap Challenge --- | |
| elif selected_game == "Fast Tap Challenge": | |
| st.subheader("โฑ๏ธ Fast Tap Challenge") | |
| if st.button("Start Timer"): | |
| st.session_state.tap_start = time.time() | |
| if st.button("Stop Timer"): | |
| if "tap_start" in st.session_state: | |
| elapsed = time.time() - st.session_state.tap_start | |
| if elapsed < 1.5: | |
| st.success(f"Great! You tapped in {elapsed:.2f}s. +1 point") | |
| st.session_state.score += 1 | |
| else: | |
| st.warning(f"Too slow! You took {elapsed:.2f}s.") | |
| del st.session_state.tap_start | |