Spaces:
Runtime error
Runtime error
File size: 5,746 Bytes
71fc926 |
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 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
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
def calculate_probability(player_total, dealer_upcard):
# Placeholder probability calculation
# Replace with actual probability calculation based on player's total and dealer's upcard
probability = (21 - player_total) / (21 - dealer_upcard) * 100
return probability
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()
probability_table = 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_upcard = dealer.cards[0].rank if dealer.cards else 0
probability = calculate_probability(player_total, dealer_upcard)
probability_table.table(
[["Player's Total", "Dealer's Upcard", "Probability of Winning"]],
[[str(player_total), str(dealer_upcard), f"{probability:.2f}%"]]
)
if player_total == 21 or not player.possible_actions:
break
if 'Hit' in player.possible_actions or 'Double Down' in player.possible_actions or 'Stand' in player.possible_actions:
action = player_action.radio("Choose your action", ("👋 Hit", "⏬ Double Down", "🚫 Stand"), 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)
elif action == "🚫 Stand":
player.stand(game_play)
break
if done_button.button("✅ Done", key=f"done_{len(player.cards)}"):
player.stand(game_play)
break
# Dealer's turn
while calculate_hand_total(dealer.cards) < 17:
dealer.dealer_hit(game_deck)
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) |