| import time |
| import random |
|
|
| import gradio as gr |
|
|
|
|
| def start_game(state): |
| time.sleep(random.uniform(1, 8)) |
| start_time = time.perf_counter() |
| return "GO!", {"start_time": start_time} |
|
|
|
|
| def stop_game(state): |
| start_time = state.get("start_time", 0) |
| if start_time == 0: |
| return "You must press Start first & wait for Game message 'GO'!", "", state |
| end_time = time.perf_counter() |
| total_time = end_time - start_time |
|
|
| return ( |
| "Click 'Start Game' to play again", |
| f"You took {total_time*1000:.0f} milliseconds to react", |
| {"start_time": 0}, |
| ) |
|
|
|
|
| with gr.Blocks(title="Day07 Reflex Game") as app: |
| gr.Markdown("## Reflex Game") |
|
|
| game_state = gr.State({"start_time": 0}) |
|
|
| with gr.Row(): |
| start_btn = gr.Button("Start Game", variant="primary") |
| stop_btn = gr.Button("Stop Timer", variant="stop") |
| with gr.Row(): |
| message_area = gr.Textbox(label="Game Message") |
| result_area = gr.Textbox(label="Reflex Time") |
| start_btn.click( |
| fn=start_game, inputs=game_state, outputs=[message_area, game_state] |
| ) |
|
|
| stop_btn.click( |
| fn=stop_game, inputs=game_state, outputs=[message_area, result_area, game_state] |
| ) |
|
|
| app.launch() |
|
|