Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import random | |
| # Game State | |
| players = {} | |
| treasures = [{"x": random.uniform(-10, 10), "y": random.uniform(-10, 10), "z": random.uniform(-10, 10)} for _ in range(5)] | |
| def start_game(player_name): | |
| if not player_name: | |
| return "Error: Player name is required." | |
| players[player_name] = {"score": 0, "found": []} | |
| return f"Welcome, {player_name}! The game has started." | |
| def get_treasures(): | |
| return treasures | |
| def find_treasure(player_name, treasure_index): | |
| if player_name not in players: | |
| return "Error: Player not found." | |
| if 0 <= treasure_index < len(treasures): | |
| found_treasure = treasures.pop(treasure_index) | |
| players[player_name]["score"] += 10 | |
| players[player_name]["found"].append(found_treasure) | |
| return f"Treasure found! Your score: {players[player_name]['score']}" | |
| return "Error: Invalid treasure index." | |
| def leaderboard(): | |
| sorted_leaderboard = sorted(players.items(), key=lambda x: x[1]["score"], reverse=True) | |
| return sorted_leaderboard | |
| # Gradio Interface | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# 🏴☠️ Treasure Hunt Game") | |
| with gr.Row(): | |
| player_input = gr.Textbox(label="Enter Player Name") | |
| start_button = gr.Button("Start Game") | |
| start_output = gr.Textbox(label="Game Status") | |
| start_button.click(start_game, inputs=player_input, outputs=start_output) | |
| treasure_list = gr.Dataframe(label="Available Treasures") | |
| fetch_button = gr.Button("Get Treasures") | |
| fetch_button.click(get_treasures, outputs=treasure_list) | |
| with gr.Row(): | |
| treasure_index = gr.Number(label="Treasure Index") | |
| player_name_find = gr.Textbox(label="Player Name") | |
| find_button = gr.Button("Find Treasure") | |
| find_output = gr.Textbox(label="Find Status") | |
| find_button.click(find_treasure, inputs=[player_name_find, treasure_index], outputs=find_output) | |
| leaderboard_button = gr.Button("Show Leaderboard") | |
| leaderboard_output = gr.JSON(label="Leaderboard") | |
| leaderboard_button.click(leaderboard, outputs=leaderboard_output) | |
| demo.launch(server_name="0.0.0.0", server_port=7860) | |