Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import random | |
| import time | |
| # Function to generate math questions | |
| def generate_questions(level, num_questions=5): | |
| questions = [] | |
| for _ in range(num_questions): | |
| num1 = random.randint(1, level * 10) | |
| num2 = random.randint(1, level * 10) | |
| operator = random.choice(['+', '-', '*', '//']) # Integer division | |
| if operator == '//': | |
| num1 = num1 * num2 # Ensure whole-number division | |
| question = f"What is {num1} {operator} {num2}?" | |
| answer = eval(f"{num1} {operator} {num2}") | |
| questions.append((question, answer)) | |
| return questions | |
| # Function to get background image | |
| def get_background(level): | |
| backgrounds = [ | |
| "https://example.com/background1.jpg", | |
| "https://example.com/background2.jpg", | |
| "https://example.com/background3.jpg", | |
| ] | |
| return backgrounds[level % len(backgrounds)] | |
| # Initialize session state | |
| if 'level' not in st.session_state: | |
| st.session_state.level = 1 | |
| if 'questions' not in st.session_state: | |
| st.session_state.questions = generate_questions(st.session_state.level) | |
| if 'score' not in st.session_state: | |
| st.session_state.score = 0 | |
| if 'start_time' not in st.session_state: | |
| st.session_state.start_time = time.time() | |
| st.set_page_config(page_title="Math Quiz Game", layout="centered") # Mobile-friendly layout | |
| st.title("๐งฎ Math Quiz Game") | |
| st.markdown(f"### Level {st.session_state.level}") | |
| # Display background | |
| st.markdown( | |
| f""" | |
| <style> | |
| .stApp {{ | |
| background-image: url('{get_background(st.session_state.level)}'); | |
| background-size: cover; | |
| background-position: center; | |
| }} | |
| .block-container {{ | |
| padding: 1rem; | |
| max-width: 100%; | |
| }} | |
| input {{ | |
| font-size: 18px; | |
| padding: 8px; | |
| }} | |
| button {{ | |
| font-size: 20px; | |
| padding: 10px; | |
| }} | |
| </style> | |
| """, | |
| unsafe_allow_html=True | |
| ) | |
| # Retrieve stored questions | |
| questions = st.session_state.questions | |
| user_answers = [] | |
| for i, (question, answer) in enumerate(questions): | |
| user_answer = st.text_input(question, key=f"q_{st.session_state.level}_{i}") | |
| user_answers.append((user_answer, answer)) | |
| if st.button("โ Submit Answers"): | |
| error_messages = [] | |
| level_score = 0 | |
| for i, (user_answer, answer) in enumerate(user_answers): | |
| if not user_answer.strip(): | |
| error_messages.append(f"โ Question {i + 1}: Please enter an answer.") | |
| else: | |
| try: | |
| if float(user_answer) == answer: | |
| level_score += 1 | |
| else: | |
| error_messages.append(f"โ Question {i + 1}: Incorrect! Correct answer is {answer}.") | |
| except ValueError: | |
| error_messages.append(f"โ ๏ธ Question {i + 1}: Invalid input. Please enter a number.") | |
| if error_messages: | |
| for msg in error_messages: | |
| st.error(msg) | |
| else: | |
| elapsed_time = round(time.time() - st.session_state.start_time, 2) | |
| st.success(f"๐ You scored {level_score} out of 5 in {elapsed_time} seconds!") | |
| st.session_state.score += level_score | |
| st.session_state.level += 1 | |
| st.session_state.questions = generate_questions(st.session_state.level) | |
| st.session_state.start_time = time.time() # Reset timer | |
| st.experimental_rerun() | |
| # Show total score | |
| st.sidebar.markdown(f"## Total Score: {st.session_state.score}") | |