-
Notifications
You must be signed in to change notification settings - Fork 9
/
black_jack.py
173 lines (135 loc) Β· 6.94 KB
/
black_jack.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
166
167
168
169
170
171
172
173
"""
############## Blackjack Project #####################
Difficulty Normal π: Use all Hints below to complete the project.
Difficulty Hard π€: Use only Hints 1, 2, 3 to complete the project.
Difficulty Extra Hard π: Only use Hints 1 & 2 to complete the project.
Difficulty Expert π€―: Only use Hint 1 to complete the project.
############## Our Blackjack House Rules #####################
# The deck is unlimited in size.
# There are no jokers.
# The Jack/Queen/King all count as 10.
# The the Ace can count as 11 or 1.
# Use the following list as the deck of cards:
# cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
# The cards in the list have equal probability of being drawn.
# Cards are not removed from the deck as they are drawn.
# The computer is the dealer.
#################### Hints #####################
Hint 1: Go to this website and try out the Blackjack game:
https://games.washingtonpost.com/games/blackjack/
Then try out the completed Blackjack project here:
http://blackjack-final.appbrewery.repl.run
Hint 2: Read this breakdown of program requirements:
http://listmoz.com/view/6h34DJpvJBFVRlZfJvxF
Then try to create your own flowchart for the program.
Hint 3: Download and read this flow chart I've created:
https://drive.google.com/uc?export=download&id=1rDkiHCrhaf9eX7u7yjM1qwSuyEk-rPnt
Hint 4: Create a deal_card() function that uses the List below to *return* a random card.
11 is the Ace.
cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
Hint 5: Deal the user and computer 2 cards each using deal_card() and append().
user_cards = []
computer_cards = []
Hint 6: Create a function called calculate_score() that takes a List of cards as input
and returns the score.
Look up the sum() function to help you do this.
Hint 7: Inside calculate_score() check for a blackjack (a hand with only 2 cards: ace + 10) and return 0 instead of the actual score. 0 will represent a blackjack in our game.
Hint 8: Inside calculate_score() check for an 11 (ace). If the score is already over 21, remove the 11 and replace it with a 1. You might need to look up append() and remove().
Hint 9: Call calculate_score(). If the computer or the user has a blackjack (0) or if the user's score is over 21, then the game ends.
Hint 10: If the game has not ended, ask the user if they want to draw another card. If yes, then use the deal_card() function to add another card to the user_cards List. If no, then the game has ended.
Hint 11: The score will need to be rechecked with every new card drawn and the checks in Hint 9 need to be repeated until the game ends.
Hint 12: Once the user is done, it's time to let the computer play. The computer should keep drawing cards as long as it has a score less than 17.
Hint 13: Create a function called compare() and pass in the user_score and computer_score. If the computer and user both have the same score, then it's a draw. If the computer has a blackjack (0), then the user loses. If the user has a blackjack (0), then the user wins. If the user_score is over 21, then the user loses. If the computer_score is over 21, then the computer loses. If none of the above, then the player with the highest score wins.
Hint 14: Ask the user if they want to restart the game. If they answer yes, clear the console and start a new game of blackjack and show the logo from art.py.
"""
import random
import os
# game ascii logo
logo = """
.------. _ _ _ _ _
|A_ _ |. | | | | | | (_) | |
|( \/ ).-----. | |__ | | __ _ ___| | ___ __ _ ___| | __
| \ /|K /\ | | '_ \| |/ _` |/ __| |/ / |/ _` |/ __| |/ /
| \/ | / \ | | |_) | | (_| | (__| <| | (_| | (__| <
`-----| \ / | |_.__/|_|\__,_|\___|_|\_\ |\__,_|\___|_|\_\\
| \/ K| _/ |
`------' |__/
"""
def deal_card():
"""
return a random card
"""
cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
card = random.choice(cards)
return card
def calculate_score(cards):
"""
take a list of card as input and returen the socer from the cards. check for a blackjack (a hand with only 2 cards: ace + 10) and return 0 instead of the actual score. 0 will represent a blackjack in our game. check for an 11 (ace). If the score is already over 21, remove the 11 and replace it with a 1.
"""
if sum(cards) == 21 and len(cards) == 2:
return 0
if 11 in cards and sum(cards) > 21:
cards.remove(11)
cards.append(1)
return sum(cards)
def compare(user_score, computer_score):
"""
compare scores between user and computer and show the result of the game.
"""
if user_score > 21 and computer_score > 21:
return "You went over. You lose π€"
elif user_score == computer_score:
return "Draw π"
elif computer_score == 0:
return "Lose, opponent has Blackjack π±"
elif user_score == 0:
return "Win with a Blackjack π"
elif user_score > 21:
return "You went over. You lose π"
elif computer_score > 21:
return "Opponent went over. You win π"
elif user_score > computer_score:
return "You win π"
else:
return "You lose π€"
def play_game():
"""
main play game function.
"""
print(logo)
# deal the user and computer 2 cards each
user_cards = []
computer_cards = []
is_game_over = False
for _ in range(2):
user_cards.append(deal_card())
computer_cards.append(deal_card())
# score rechecked with every new card drawn
while not is_game_over:
# if the computer has blackjack or if user's score is over 21 the the games end.
user_score = calculate_score(user_cards)
computer_score = calculate_score(computer_cards)
print(f" Your cards: {user_cards}, Current Score: {user_score} ")
print(
f" Computer cards: {computer_cards}, Current Score: {computer_score} ")
if user_score == 0 or computer_score == 0 or user_score > 21:
is_game_over = True
else:
user_should_deal = input(
"Type 'y' to get another card or type 'n' to pass: ")
if user_should_deal == "y":
user_cards.append(deal_card())
else:
is_game_over = True
# User is done. Now it's computer time until computer score less than 17
while computer_score != 0 and computer_score < 17:
computer_cards.append(deal_card())
computer_score = calculate_score(computer_cards)
print(f" Your final hand: {user_cards}, Final Score: {user_score} ")
print(
f" Computer final hand: {computer_cards}, Final Score: {computer_score} ")
print(compare(user_score, computer_score))
# ask the user to restart the game. if answer is yes the clear the screan and star new game.
while input("Do you want to play a game of Blackjack? Type 'y' or 'n' \n=> ") == "y":
os.system('cls' if os.name == 'nt' else 'clear')
play_game()