File size: 2,633 Bytes
af756e9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import random
import gradio as gr

# Bingo number categories
bingo_numbers = {
    'B': list(range(1, 16)),
    'I': list(range(16, 31)),
    'N': list(range(31, 46)),
    'G': list(range(46, 61)),
    'O': list(range(61, 76))
}

# Combine all numbers into a list
all_numbers = [(letter, num) for letter, nums in bingo_numbers.items() for num in nums]
random.shuffle(all_numbers)

drawn_numbers = set()

def draw_bingo_number():
    if all_numbers:
        letter, num = all_numbers.pop(0)
        drawn_numbers.add((letter, num))
        result_html = f"""
        <div style='text-align: center; font-size: 70px; font-weight: bold; background-color: red; color: white; padding: 20px; border-radius: 10px;'>
            πŸŽ‰ Drawn Number: {letter}{num} πŸŽ‰
        </div>
        """
        return result_html, generate_bingo_card()
    else:
        return "# 🎯 <span style='font-size: 50px;'>All numbers have been drawn!</span> 🎯", generate_bingo_card()

def new_game():
    global all_numbers, drawn_numbers
    all_numbers = [(letter, num) for letter, nums in bingo_numbers.items() for num in nums]
    random.shuffle(all_numbers)
    drawn_numbers.clear()
    return "# πŸ†• <span style='font-size: 50px;'>New Game Started!</span> πŸ†•", generate_bingo_card()

def generate_bingo_card():
    card = ""
    card += "<div style='display: grid; grid-template-columns: repeat(5, 1fr); gap: 10px; text-align: center; font-size: 18px; font-weight: bold;'>"
    for letter in bingo_numbers.keys():
        card += f"<div style='background-color: #ffcc00; padding: 10px; border-radius: 5px;'>{letter}</div>"
    for i in range(15):
        for letter in bingo_numbers.keys():
            num = bingo_numbers[letter][i]
            color = "#4CAF50" if (letter, num) in drawn_numbers else "#ffffff"
            card += f"<div style='background-color: {color}; padding: 10px; border-radius: 5px;'>{num}</div>"
    card += "</div>"
    return card

# Gradio Interface
with gr.Blocks() as iface:
    gr.Markdown("## 🎲 Bingo Number Generator 🎲", elem_id="header")
    gr.Markdown("Click the button to draw a bingo number and see the updated bingo card.")
    draw_btn = gr.Button("🎟️ Draw Number", elem_id="draw_button")
    new_game_btn = gr.Button("πŸ”„ New Game", elem_id="new_game_button")
    output_text = gr.HTML("# Press Draw to Start", elem_id="output_text")
    output_card = gr.HTML(generate_bingo_card(), elem_id="bingo_card")

    draw_btn.click(draw_bingo_number, inputs=[], outputs=[output_text, output_card])
    new_game_btn.click(new_game, inputs=[], outputs=[output_text, output_card])

iface.launch()