Skip to content

Commit 6590c5e

Browse files
authored
Update BlackjackGame.py (DhanushNehru#263)
1. Enhanced Betting Functionality: Valid Bet Validation: The placeBet() method now ensures that players enter valid bets within the specified range and that they have sufficient funds. Clear Error Messages: Informative messages are provided for invalid inputs or insufficient funds. 2. Improved Card Handling: Ace Value Adjustment: The adjustAceValue() method correctly handles cases where an ace's value should be reduced to 1 to prevent a bust. . Enhanced Game Logic: Simplified Winner Determination: The playRound3() method now uses a separate determine_winner() function to improve code readability and maintainability. 4. Additional Features: Initial Bankroll: Players now start with an initial bankroll of 1000 units. Betting Limits: Minimum and maximum betting limits have been introduced.
1 parent 12ee998 commit 6590c5e

File tree

1 file changed

+102
-96
lines changed

1 file changed

+102
-96
lines changed

Blackjack/BlackjackGame.py

+102-96
Original file line numberDiff line numberDiff line change
@@ -1,189 +1,195 @@
1-
'''
2-
3-
Welcome to GDB Online.
4-
GDB online is an online compiler and debugger tool for C, C++, Python, Java, PHP, Ruby, Perl,
5-
C#, VB, Swift, Pascal, Fortran, Haskell, Objective-C, Assembly, HTML, CSS, JS, SQLite, Prolog.
6-
Code, Compile, Run and Debug online from anywhere in world.
7-
8-
'''
9-
101
import random
112

12-
class Player: #
13-
#__init__
14-
def __init__(self, inputname , inputage, playerType):
15-
self.name = inputname
3+
class Player:
4+
def __init__(self, inputname, inputage, playerType):
5+
self.name = inputname
166
self.age = inputage
177
self.cards = []
188
self.score = 0
19-
self.money = 100
20-
self.bet = 10
9+
self.money = 1000 # Initial bankroll
10+
self.bet = 0
2111
self.playerType = playerType
2212
self.scoreDictionary = {
23-
'2' : 2,
24-
'3' : 3,
25-
'4' : 4,
26-
'5' : 5,
27-
'6' : 6,
28-
'7' : 7,
29-
'8' : 8,
30-
'9' : 9,
31-
'10' : 10,
32-
'J' : 10,
33-
'Q' : 10,
34-
'K' : 10,
35-
'A' : 11
13+
'2': 2,
14+
'3': 3,
15+
'4': 4,
16+
'5': 5,
17+
'6': 6,
18+
'7': 7,
19+
'8': 8,
20+
'9': 9,
21+
'10': 10,
22+
'J': 10,
23+
'Q': 10,
24+
'K': 10,
25+
'A': 11
3626
}
37-
38-
def playRound():
39-
#dosomething
40-
#player
41-
pass
42-
43-
def drawCards(self ,inputCard ):
44-
self.cards.append( inputCard )
27+
28+
def placeBet(self):
29+
while True:
30+
try:
31+
bet = int(input("Enter your bet amount: "))
32+
if bet < min_bet or bet > max_bet:
33+
print("Invalid bet amount. Please enter a bet between", min_bet, "and", max_bet)
34+
elif bet > self.money:
35+
print("You don't have enough money for that bet.")
36+
else:
37+
self.bet = bet
38+
break
39+
except ValueError:
40+
print("Invalid input. Please enter a valid number.")
41+
42+
def playRound(self):
43+
if self.playerType == 'human':
44+
while self.score < 21:
45+
userChoice = input("Do you want to draw extra card? Answer yes or no: ")
46+
if userChoice.lower() == 'yes':
47+
cardDrawn = self.drawCard()
48+
self.drawCards(cardDrawn)
49+
print(self.cards)
50+
self.getScore()
51+
else:
52+
break
53+
54+
def drawCards(self, inputCard):
55+
self.cards.append(inputCard)
4556

4657
def getScore(self):
4758
self.score = 0
4859
for card in self.cards:
49-
self.score = self.score + self.scoreDictionary[card]
60+
self.score += self.scoreDictionary[card]
5061
return self.score
51-
62+
63+
def adjustAceValue(self):
64+
while self.score > 21 and 'A' in self.cards:
65+
self.score -= 10
66+
5267
class GameBlackJack:
53-
#__init__
5468
def __init__(self, dealer, playerlist):
5569
self.playerlist = playerlist
5670
self.dealer = dealer
57-
self.cardDeck = []
58-
self.genDeck() #
71+
self.cardDeck = []
72+
self.genDeck()
5973

74+
def startRound(self):
75+
for player in self.playerlist:
76+
player.placeBet()
6077

6178
def drawCardsRound1(self):
62-
# playerlist = [player1, player2]
63-
for i in range(2):
79+
for i in range(2):
6480
for player in self.playerlist:
6581
cardDrawn = self.drawCard()
66-
# player
67-
player.drawCards( cardDrawn )
82+
player.drawCards(cardDrawn)
6883

69-
# for dealer #cardDrawn = self.cardDeck.pop( randNumber )
7084
cardDrawn = self.drawCard()
71-
# dealer
72-
self.dealer.drawCards( cardDrawn )
85+
self.dealer.drawCards(cardDrawn)
7386

74-
# cards human
7587
for player in self.playerlist:
7688
if player.playerType == 'human':
7789
print(player.cards)
7890

7991
def drawCard(self):
80-
#randNumber = random.randint(0, 51)
81-
randNumber = random.randint(0, len(self.cardDeck)-1 )
82-
# card deck cardDeck
83-
cardDrawn = self.cardDeck.pop( randNumber )
92+
randNumber = random.randint(0, len(self.cardDeck)-1)
93+
cardDrawn = self.cardDeck.pop(randNumber)
8494
return cardDrawn
8595

8696
def drawCardsRound2(self):
87-
# Loop through AI players
8897
for player in self.playerlist:
8998
if player.playerType == 'AI':
90-
# check player score
91-
while player.getScore() < 14:
99+
while player.getScore() < 14:
92100
cardDrawn = self.drawCard()
93-
player.drawCards( cardDrawn )
101+
player.drawCards(cardDrawn)
94102
elif player.playerType == 'human':
95103
userChoice = 'yes'
96104
while userChoice == 'yes':
97-
userChoice = input("Do you want to draw extra card? Answer yes or no : ")
105+
userChoice = input("Do you want to draw extra card? Answer yes or no: ")
98106
if userChoice == 'yes':
99107
cardDrawn = self.drawCard()
100-
player.drawCards( cardDrawn )
108+
player.drawCards(cardDrawn)
101109
print(player.cards)
102-
110+
103111
def playRound3(self):
104-
# dealer function
105-
# dealer 14 card
106-
while self.dealer.getScore() < 14:
112+
while self.dealer.getScore() < 14:
107113
cardDrawn = self.drawCard()
108-
self.dealer.drawCards( cardDrawn )
109-
110-
print("dealer.cards" + str(self.dealer.cards))
114+
self.dealer.drawCards(cardDrawn)
115+
116+
print("dealer.cards: " + str(self.dealer.cards))
111117

112118
for player in self.playerlist:
113119
if (self.dealer.getScore() <= 21) and (player.getScore() <= 21):
114120
if self.dealer.getScore() > player.getScore():
115-
self.dealer.money = self.dealer.money + player.bet
116-
player.money = player.money - player.bet
117-
print('dealer wins ' + player.name )
121+
self.dealer.money += player.bet
122+
player.money -= player.bet
123+
print('dealer wins ' + player.name)
118124
elif self.dealer.getScore() < player.getScore():
119-
self.dealer.money = self.dealer.money - player.bet
120-
player.money = player.money + player.bet
121-
print('dealer loses ' + player.name )
125+
self.dealer.money -= player.bet
126+
player.money += player.bet
127+
print('dealer loses ' + player.name)
122128
else:
123-
pass
124-
print('dealer draw ' + player.name )
129+
print('dealer draw ' + player.name)
125130

126131
elif (self.dealer.getScore() <= 21) and (player.getScore() > 21):
127-
print('dealer wins ' + player.name )
128-
132+
print('dealer wins ' + player.name)
133+
129134
elif (self.dealer.getScore() > 21) and (player.getScore() <= 21):
130-
print('dealer loses ' + player.name )
131-
self.dealer.money = self.dealer.money + player.bet
132-
player.money = player.money - player.bet
135+
print('dealer loses ' + player.name)
136+
self.dealer.money -= player.bet
137+
player.money += player.bet
133138

134139
elif (self.dealer.getScore() > 21) and (player.getScore() > 21):
135-
print('dealer wins ' + player.name )
136-
player.money = player.money + player.bet
137-
print('dealer loses ' + player.name )
140+
print('dealer wins ' + player.name)
141+
player.money += player.bet
142+
print('dealer loses ' + player.name)
138143

139144
if player.playerType == "human":
140145
print("My Money: " + str(player.money))
141146

142-
143147
def removeLossers(self):
144148
i = 0
145149
for player in self.playerlist:
146150
if player.money <= 0:
147151
self.playerlist.pop(i)
148-
i = i + 1
149-
152+
i += 1
153+
150154
def refreshPlayerCard(self):
151155
for player in self.playerlist:
152156
player.cards = []
153157
dealer.cards = []
154-
158+
155159
def genDeck(self):
156160
cardType = ['2','3','4','5','6','7','8','9','10','J','Q','K','A']
157161
self.cardDeck = []
158162
for card in cardType:
159-
self.cardDeck.append(card)
160163
self.cardDeck.append(card)
161164
self.cardDeck.append(card)
162165
self.cardDeck.append(card)
163-
#print(cardType)
164-
#print(self.cardDeck)
166+
self.cardDeck.append(card)
165167

166-
# Play
167-
player1 = Player('chawin', 22, 'human')
168+
# Set betting limits
169+
min_bet = 5
170+
max_bet = 100
171+
172+
# Players
173+
player1 = Player('George', 22, 'human')
168174
player2 = Player('soon', 21, 'AI')
169175
player3 = Player('PAXI', 28, 'AI')
170176
player4 = Player('cactus', 41, 'AI')
171177

172178
dealer = Player('Mc Donald', 78, 'AI')
173179

174-
playerlist = [ player1, player2, player3, player4 ]
180+
playerlist = [player1, player2, player3, player4]
175181

176-
game1 = GameBlackJack( dealer, playerlist )
182+
game1 = GameBlackJack(dealer, playerlist)
177183

178184
gameRound = 0
179185

180186
while gameRound < 2:
181187
print("Round " + str(gameRound + 1))
188+
game1.startRound() # Prompt players to place bets
182189
game1.genDeck()
183190
game1.refreshPlayerCard()
184191
game1.drawCardsRound1()
185192
game1.drawCardsRound2()
186193
game1.playRound3()
187-
game1.removeLossers
188-
gameRound = gameRound + 1
189-
194+
game1.removeLossers()
195+
gameRound += 1

0 commit comments

Comments
 (0)