-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathblackjack.py
132 lines (124 loc) · 4.57 KB
/
blackjack.py
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
from asyncio.windows_events import NULL
import random
import math
deck = []
def beatify_hand(player):
cards = ["As", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Valet", "Dame", "Roi"]
return ", ".join([cards[card - 1] for card in player["deck"]])
def shuffle():
global deck
random.shuffle(deck)
def hit():
global deck
return deck.pop()
def initialize_player():
player = {
"deck": [hit() for i in range(2)],
"money": 100,
"bet": 0
}
return player
def initialize():
global deck
deck = [i for i in range(1, 14)]*4
shuffle()
player = initialize_player()
dealer = initialize_player()
return player, dealer
def hand_value(player):
value = 0
for card in player["deck"]:
value += card
return value
def has_blackjack(player):
return hand_value(player) == 21
def has_busted(player):
return hand_value(player) > 21
def dealer_turn(dealer, player):
while hand_value(dealer) < hand_value(player):
dealer["deck"].append(hit())
return dealer
def round_end(player, dealer):
dealer = dealer_turn(dealer, player)
if(round_check(player) == "blackjack"):
if round_check(dealer) == "blackjack":
return "egality"
else: return "player"
if(round_check(player) == "busted"):
return "dealer"
if(round_check(player) == "playing"):
if(round_check(dealer) == "busted"): return "player"
if(round_check(dealer) == "blackjack"): return "dealer"
if(hand_value(player) > hand_value(dealer)): return "player"
if(hand_value(player) < hand_value(dealer)): return "dealer"
return "egality"
def round_check(player):
if(has_blackjack(player)): return "blackjack"
if(has_busted(player)): return "busted"
return "playing"
def player_turn(player, dealer):
result = round_check(player)
if(result == "blackjack" or result == "busted"): return result
while True:
sentences = [
"Votre main: {} ({})".format(beatify_hand(player), hand_value(player)),
"Votre mise: {}".format(player["bet"]),
"1. Tirer une carte",
"2. Passer",
"3. Split",
"4. Double"
]
for sentence in sentences: print(sentence)
choice = int(input("Votre choix: "))
if choice == 1:
player["deck"].append(hit())
if(round_check(player) == "busted"): return "busted"
if(round_check(player) == "blackjack"): return "blackjack"
return player_turn(player, dealer)
elif choice == 2:
return round_end(player, dealer)
elif choice == 3:
player["deck"].append(hit())
player["money"] += math.ceil(player["bet"]/2)
player["bet"] -= math.floor(player["bet"]/2)
return player_turn(player, dealer)
elif choice == 4:
player["money"] -= player["bet"]
player["bet"] *= 2
player["deck"].append(hit())
return player_turn(player, dealer)
def start(player, money_start):
if not player:
player, dealer = initialize()
player["money"] = money_start
else: _, dealer = initialize()
bet = math.inf
while bet > player["money"] or bet <= 0:
bet = int(input("Votre mise: "))
player["bet"] = bet
result = player_turn(player, dealer)
if(result == "blackjack"):
print("Blackjack!")
player["money"] += player["bet"]*2
elif(result == "busted"):
print("Vous avez perdu {}$ (deck: {}, dealer: {})".format(player["bet"], hand_value(player), hand_value(dealer)))
player["money"] -= player["bet"]
elif(result == "egality"):
print("Egalité! (deck: {}, dealer: {})".format(hand_value(player), hand_value(dealer)))
elif(result == "player"):
print("Vous avez gagné {}$ (deck: {}, dealer: {})".format(player["bet"], hand_value(player), hand_value(dealer)))
player["money"] += player["bet"]
elif(result == "dealer"):
print("Vous avez perdu {}$ (deck: {}, dealer: {})".format(player["bet"], hand_value(player), hand_value(dealer)))
player["money"] -= player["bet"]
else:
print("Erreur")
print("Vous avez {}$".format(player["money"]))
player["deck"] = [hit() for i in range(2)]
print("\n<------------->\n")
if(player["money"] > 0):
start(player, NULL)
def init():
start_money = int(input("Votre argent: "))
start(NULL, start_money)
init()