Game / app.py
tayy786's picture
Create app.py
49a5907 verified
Raw
History Blame Contribute Delete
4.37 kB
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()