Spaces:
Runtime error
Runtime error
File size: 4,710 Bytes
4abf612 b1097e6 c0795f6 b1097e6 c0795f6 b1097e6 ca61840 b1097e6 ca61840 b1097e6 4abf612 b1097e6 4abf612 32c96cc b1097e6 9f1a7c8 650dd18 4abf612 32c96cc 4abf612 32c96cc 4abf612 32c96cc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
import streamlit as st
import os
import csv
import huggingface_hub
from PIL import Image
from components import GamePlay, Player, Dealer, Deck
from huggingface_hub import Repository, hf_hub_download, upload_file
from datetime import datetime
DATASET_REPO_URL = "https://huggingface.co/datasets/awacke1/Carddata.csv"
DATASET_REPO_ID = "awacke1/Carddata.csv"
DATA_FILENAME = "Carddata.csv"
DATA_FILE = os.path.join("data", DATA_FILENAME)
HF_TOKEN = os.environ.get("HF_TOKEN")
number_of_decks = 6
blackjack_multiplier = 1.5
def generate_html() -> str:
with open(DATA_FILE) as csvfile:
reader = csv.DictReader(csvfile)
rows = []
for row in reader:
rows.append(row)
rows.reverse()
if len(rows) == 0:
return "no messages yet"
else:
html = "<div class='chatbot'>"
for row in rows:
html += "<div>"
html += f"<span>{row['name']}</span>"
html += f"<span class='message'>{row['message']}</span>"
html += "</div>"
html += "</div>"
return html
def store_message(name: str, message: str):
if name and message:
with open(DATA_FILE, "a") as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=["name", "message", "time"])
writer.writerow(
{"name": name, "message": message, "time": str(datetime.now())}
)
commit_url = repo.push_to_hub()
return generate_html()
# Initialize player, dealer, deck and game play. Cache these variables
@st.cache(allow_output_mutation=True, suppress_st_warning=True)
def start_game():
game_deck = Deck(number_of_decks)
dealer = Dealer()
player = Player()
game_play = GamePlay(player, dealer, game_deck, blackjack_multiplier)
return game_deck, dealer, player, game_play
game_deck, dealer, player, game_play = start_game()
def display_pro_tip(player, dealer):
player_total = sum(card.rank for card in player.cards)
if dealer.cards:
dealer_upcard = dealer.cards[0].rank
else:
dealer_upcard = 0
if player_total <= 11:
return "Pro Tip: With a total of 11 or less, it's generally advisable to hit."
elif player_total == 12 and dealer_upcard <= 3:
return "Pro Tip: With a total of 12 and the dealer showing 3 or less, consider hitting."
elif player_total >= 17:
return "Pro Tip: With a total of 17 or more, it's usually best to stand."
else:
return ""
def display_betting_strategy(player, dealer):
player_total = sum(card.rank for card in player.cards)
if dealer.cards:
dealer_upcard = dealer.cards[0].rank
else:
dealer_upcard = 0
if player_total <= 11:
return "Betting Strategy: Consider increasing your bet when your total is 11 or less."
elif player_total >= 17 and dealer_upcard <= 6:
return "Betting Strategy: Consider increasing your bet when you have a strong hand and the dealer has a weak upcard."
else:
return ""
def calculate_hand_total(hand):
total = sum(card.rank for card in hand)
return total
st.title('🃏Blackjack Simulator AI♠2️⃣1️⃣')
if st.button('New hand?'):
game_play.deal_in()
player_stats = st.empty()
player_images = st.empty()
player_action = st.empty()
done_button = st.empty()
dealer_stats = st.empty()
dealer_images = st.empty()
result = st.empty()
pro_tip = st.empty()
betting_strategy = st.empty()
while True:
game_play.update()
player_stats.write(player)
player_images.image([Image.open(card.image_location) for card in player.cards], width=100)
dealer_stats.write(dealer)
dealer_images.image([Image.open(card.image_location) for card in dealer.cards], width=100)
result.write(game_play)
pro_tip.write(display_pro_tip(player, dealer))
betting_strategy.write(display_betting_strategy(player, dealer))
player_total = calculate_hand_total(player.cards)
dealer_total = calculate_hand_total(dealer.cards)
if player_total == 21 or dealer_total == 21 or not player.possible_actions:
break
if 'Hit' in player.possible_actions or 'Double Down' in player.possible_actions:
action = player_action.radio("Choose your action", ("👋 Hit", "⏬ Double Down"), key=f"action_{len(player.cards)}")
if action == "👋 Hit":
player.player_hit(game_deck, game_play)
elif action == "⏬ Double Down":
player.double_down(game_deck, game_play)
if done_button.button("✅ Done", key=f"done_{len(player.cards)}"):
player.stand(game_play)
else:
player.stand(game_play)
|