File size: 3,260 Bytes
8e6f243
5bbe733
8e6f243
1ba70c1
5bbe733
 
 
 
1ba70c1
 
5bbe733
 
 
 
1ba70c1
 
5bbe733
 
 
 
1ba70c1
 
5bbe733
 
 
1ba70c1
5bbe733
1ba70c1
 
5bbe733
1ba70c1
 
 
 
 
 
5bbe733
 
 
1ba70c1
 
 
 
 
5bbe733
8e6f243
1ba70c1
 
 
5bbe733
1ba70c1
 
 
5bbe733
1ba70c1
 
8e6f243
1ba70c1
 
 
 
8e6f243
1ba70c1
 
 
 
c176284
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f2f5a8c
c176284
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import gradio as gr
import random

# ๐Ÿง  Sample questions for kids
questions = [
    {
        "code": 'print("Hello" + "World")',
        "options": ["HelloWorld", "Hello World", "Hello+World"],
        "answer": "HelloWorld",
        "hint": "What happens when you add two strings?"
    },
    {
        "code": 'print(2 * 3)',
        "options": ["6", "23", "5"],
        "answer": "6",
        "hint": "Multiplication or joining?"
    },
    {
        "code": 'x = 5\nprint(x + 2)',
        "options": ["7", "52", "2"],
        "answer": "7",
        "hint": "What is 5 + 2?"
    }
]

# ๐Ÿ” Track state
score = 0
question_index = 0
history = []

def get_current_question():
    return questions[question_index]

def show_question():
    q = get_current_question()
    return q["code"], gr.update(choices=q["options"]), "", f"โญ Score: {score}"

def check_answer(choice):
    global score
    correct = get_current_question()["answer"]
    result = ""
    if choice == correct:
        result = "โœ… Correct! Great job!"
        score_msg = f"โญ Score: {score + 1}"
        score += 1
    else:
        result = f"โŒ Oops! The correct answer was: {correct}"
        score_msg = f"โญ Score: {score}"
    return result, score_msg

def skip_question():
    next_q()
    return show_question()

def get_hint():
    return f"๐Ÿ’ก Hint: {get_current_question()['hint']}"

def next_q():
    global question_index
    history.append(question_index)
    question_index = (question_index + 1) % len(questions)

def prev_q():
    global question_index
    if history:
        question_index = history.pop()
    return show_question()

# ๐ŸŽจ Gradio UI
with gr.Blocks(theme=gr.themes.Base(primary_hue="green", secondary_hue="pink")) as app:
    gr.Markdown("## ๐Ÿ Python Fun Quiz Game for Kids ๐ŸŽฎ")
    with gr.Row():
        score_box = gr.Textbox(label="๐Ÿ“Š Your Score", interactive=False, value="โญ Score: 0")
        hint_box = gr.Textbox(label="๐Ÿ’ก Hint", interactive=False)
    code_display = gr.Textbox(label="๐Ÿง  What will this Python code print?", lines=2, interactive=False)
    options = gr.Radio(choices=[], label="๐Ÿง Choose your answer")
    result = gr.Textbox(label="๐ŸŽฏ Result", interactive=False)
    
    with gr.Row():
        btn_check = gr.Button("โœ… Check Answer")
        btn_hint = gr.Button("๐Ÿ’ก Get Hint")
        btn_skip = gr.Button("โญ๏ธ Next")
        btn_back = gr.Button("โช Back")

    btn_check.click(fn=check_answer, inputs=options, outputs=[result, score_box])
    btn_hint.click(fn=get_hint, outputs=hint_box)
    btn_skip.click(fn=skip_question, outputs=[code_display, options, result, score_box])
    btn_back.click(fn=prev_q, outputs=[code_display, options, result, score_box])

    # Load first question
    app.load(show_question, outputs=[code_display, options, result, score_box])

    gr.Markdown("---")
    gr.Markdown("## ๐ŸŒŸ Coming Soon: Unique Games")
    gr.Markdown("""
    - ๐Ÿ”ค **Python Word Scramble**: Rearrange jumbled Python keywords  
    - ๐ŸŽฒ **Code Dice**: Roll a die to get random challenges  
    - ๐Ÿงฉ **Puzzle Blocks**: Drag code blocks to form a working program  
    - ๐Ÿงšโ€โ™€๏ธ **Code Fairy Tales**: Read stories and guess what the code will do  
    """)

app.launch()