| import gradio as ui |
| import random |
| import time |
|
|
| |
| 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 |
|
|
| 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.", "", "" |
| |
| |
| current_balance -= bet_amount |
| |
| |
| dragon_card = random.choice(CARDS) |
| tiger_card = random.choice(CARDS) |
| |
| |
| if dragon_card["val"] > tiger_card["val"]: |
| winner = "Dragon" |
| elif tiger_card["val"] > dragon_card["val"]: |
| winner = "Tiger" |
| else: |
| winner = "Tie" |
| |
| |
| win_msg = "" |
| if bet_type == winner: |
| if winner == "Tie": |
| payout = bet_amount * 9 |
| else: |
| payout = bet_amount * 2 |
| 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 |
|
|
| |
| 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: |
| |
| 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") |
|
|
| |
| 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() |
|
|