-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
165 lines (131 loc) · 5.77 KB
/
main.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
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
165
from tkinter import *
from blackjack import Player, Dealer, conclude_game
class SetupGame:
def __init__(self):
# game logic related
self.pot = 0
self.player = Player()
self.dealer = Dealer()
# interface related - add interface elements here
self.root = Tk()
self.root.title('Casino')
self.root.iconbitmap('C:/Users/SavSamuShaman/Desktop/blackjack/pkc2.ico')
# labels
self.header_label = Label(self.root, text="You walk to the table and the dealer ask for your name")
self.message_label = Label(self.root, text='Best of luck a the blackjack table ;)')
self.error_message_label = Label(self.root)
self.player_money_label = Label(self.root, text=f'Your money : {self.player.chips}')
self.dealer_money_label = Label(self.root, text=f'Dealer money : {self.dealer.chips}')
self.pot_label = Label(self.root, text=f'Pot : 0')
self.current_score_label = Label(self.root, text=f'Current score : 0')
# buttons
self.hit_me_button = Button(self.root, text='Hit me', command=self.hit_me)
self.stay_button = Button(self.root, text='Stay', command=self.stay)
self.bet_button = Button(self.root, text='Bet', command=self.bet)
self.start_button = Button(self.root, text='Tell the dealer your name', command=self.set_up_environ)
# input box
self.entry = Entry(self.root, width=30)
# element placement
self.header_label.grid(row=0, column=1)
self.entry.grid(row=1, column=1, columnspan=3)
self.start_button.grid(row=2, column=1, padx=15, pady=20)
self.root.mainloop()
def set_up_environ(self):
name_input = self.entry.get()
if name_input:
self.player.name = name_input
self.entry.delete(0, END)
self.entry.grid_forget()
self.start_button.grid_forget()
# reusing existing elements
self.header_label['text'] = 'The Red Sparrow welcomes you, {name}'.format(name=self.player.name)
self.start_button['text'] = 'Begin'
self.start_button['command'] = self.new_round
self.start_button.grid(row=4, column=1)
self.message_label.grid(row=2, column=1)
self.player_money_label.grid(row=3, column=2)
self.dealer_money_label.grid(row=3, column=0)
self.pot_label.grid(row=3, column=1)
return
def bet(self):
"""Clears variables and starts a new round on valid bet"""
try:
amount = int(self.entry.get())
if amount > self.player.chips:
self.error_message_label['text'] = 'Not enough money'
self.error_message_label.grid(row=6, column=1)
return
self.clear_game()
self.pot += self.player.bet(amount) + self.dealer.bet(amount)
self.entry.grid_forget()
self.bet_button.grid_forget()
self.error_message_label.grid_forget()
self.entry.delete(0, END)
self.current_score_label['text'] = 'Current score : 0'
self.message_label['text'] = 'Best of luck a the blackjack table ;)'
self.pot_label['text'] = 'Pot :{pot}'.format(pot=self.pot)
self.update_money_labels()
self.current_score_label.grid(row=4, column=1)
self.stay_button.grid(row=4, column=0)
self.hit_me_button.grid(row=4, column=2)
except ValueError:
self.error_message_label['text'] = 'Invalid bet'
self.error_message_label.grid(row=6, column=1)
return
def hit_me(self):
# hit me --> deal me a card in blackjack
card = self.dealer.deal_card()
self.player.add_to_score(card)
player_score = self.player.current_score
if player_score < 21:
pass
elif player_score == 21:
self.player.win(self.pot)
self.message_label['text'] = f'{self.player.name} has Blackjack !'
self.conclude_round()
else:
self.dealer.win(self.pot)
self.message_label['text'] = f'{self.player.name} busted out'
self.conclude_round()
self.current_score_label['text'] = 'Current score : {score}'.format(score=player_score)
return
def stay(self):
player_score = self.player.current_score
player_points = abs(21 - player_score)
dealer_points = abs(21 - conclude_game(self.dealer))
if dealer_points < player_points:
self.dealer.win(self.pot)
self.message_label['text'] = f'The dealer was closer to 21. You lose'
elif dealer_points == player_points:
self.dealer.win(self.pot / 2)
self.player.win(self.pot / 2)
self.message_label['text'] = "It's a tie"
else:
self.player.win(self.pot)
self.message_label[
'text'] = f"You win ${self.pot}"
self.current_score_label['text'] = f'Your score : {player_score} \nDealer score {self.dealer.current_score}'
self.conclude_round()
return
def new_round(self):
self.start_button.grid_forget()
self.entry.grid(row=5, column=1)
self.bet_button.grid(row=5, column=2)
return
def conclude_round(self):
self.update_money_labels()
self.hit_me_button.grid_forget()
self.stay_button.grid_forget()
self.new_round()
return
def clear_game(self):
self.dealer.clear_score()
self.player.clear_score()
self.pot = 0
return
def update_money_labels(self):
self.dealer_money_label['text'] = f'Dealer money : {self.dealer.chips}'
self.player_money_label['text'] = f'Player money : {self.player.chips}'
return
if __name__ == "__main__":
new_game = SetupGame()