import gradio as ui import random import time # List of cards and their numerical values for comparison CARDS = [ {"suit": "♠", "rank": "A", "val": 1}, {"suit": "♠", "rank": "2", "val": 2}, {"suit": "♠", "rank": "J", "val": 11}, {"suit": "♠", "rank": "Q", "val": 12}, {"suit": "♠", "rank": "K", "val": 13}, {"suit": "♦", "rank": "A", "val": 1}, {"suit": "♦", "rank": "10", "val": 10}, {"suit": "♥", "rank": "K", "val": 13}, {"suit": "♣", "rank": "Q", "val": 12} ] def load_game_session(request: ui.Request): """Captures and displays the tracking/referral parameters from the URL""" params = request.query_params game_id = params.get("from_gameid", "Not Provided") channel = params.get("channelCode", "Default/Direct") welcome_msg = f"❤️ Welcome to the Club! | Channel: {channel} | Referral Agent ID: {game_id}" return welcome_msg, 1000 # Starts player with 1000 virtual chips def play_round(bet_type, bet_amount, current_balance): if bet_amount > current_balance or current_balance <= 0: return current_balance, "❌ Insufficient chips! Please reset balance.", "", "" # 1. Deduct Bet current_balance -= bet_amount # 2. Deal Cards randomly dragon_card = random.choice(CARDS) tiger_card = random.choice(CARDS) # 3. Determine Winner if dragon_card["val"] > tiger_card["val"]: winner = "Dragon" elif tiger_card["val"] > dragon_card["val"]: winner = "Tiger" else: winner = "Tie" # 4. Calculate Payout win_msg = "" if bet_type == winner: if winner == "Tie": payout = bet_amount * 9 # 1:8 payout for a tie else: payout = bet_amount * 2 # 1:1 payout for Dragon/Tiger current_balance += payout win_msg = f"🎉 You Won! +{payout} chips!" else: win_msg = f"😢 You Lost! {winner} won this round." dragon_display = f"{dragon_card['rank']}{dragon_card['suit']}" tiger_display = f"{tiger_card['rank']}{tiger_card['suit']}" game_summary = f"🎰 Result: {winner} Wins! | {win_msg}" return current_balance, game_summary, dragon_display, tiger_display # Custom CSS for standardizing casino board look css = """ .card-box { font-size: 4rem; text-align: center; padding: 20px; border-radius: 10px; border: 2px dashed #ccc; background: #f9f9f9; min-height: 120px;} .dragon-card { color: #d9534f; font-weight: bold; } .tiger-card { color: #0275d8; font-weight: bold; } .status-bar { font-weight: bold; background-color: #333; color: #fff; padding: 10px; border-radius: 5px; text-align: center;} """ with ui.Blocks(css=css, title="Dragon Tiger Live Club") as demo: # Hidden components to pass tracking attributes tracking_banner = ui.Markdown(value="Loading application tracking parameters...", elem_classes=["status-bar"]) ui.Markdown("# 🐉 DRAGON TIGER CLUB 🐅") with ui.Row(): balance_stat = ui.Number(label="Your Chips Balance 🪙", value=1000, interactive=False) bet_amount_input = ui.Slider(minimum=10, maximum=500, step=10, value=50, label="Select Bet Amount") with ui.Row(): bet_type_input = ui.Radio(["Dragon", "Tiger", "Tie"], value="Dragon", label="Place Your Bet On:") deal_btn = ui.Button("♣️ PLACE BET & DEAL CARD ♦️", variant="primary") with ui.Row(): with ui.Column(): ui.Markdown("### 🐉 DRAGON CARD") dragon_output = ui.Markdown("❔", elem_classes=["card-box", "dragon-card"]) with ui.Column(): ui.Markdown("### 🐅 TIGER CARD") tiger_output = ui.Markdown("❔", elem_classes=["card-box", "tiger-card"]) result_output = ui.Markdown("### Setup your bet and press Deal to begin play!", elem_id="result-box") reset_btn = ui.Button("Reset Chips back to 1000", variant="secondary") # App lifecycle logic demo.load(fn=load_game_session, outputs=[tracking_banner, balance_stat]) deal_btn.click( fn=play_round, inputs=[bet_type_input, bet_amount_input, balance_stat], outputs=[balance_stat, result_output, dragon_output, tiger_output] ) reset_btn.click(fn=lambda: (1000, "Balance reset. Good luck!"), outputs=[balance_stat, result_output]) demo.launch()