From 96cf02b12923fffb1cfc2df71e7dd29a4f80a563 Mon Sep 17 00:00:00 2001 From: dsg753 Date: Mon, 26 Aug 2024 18:20:31 +0300 Subject: [PATCH] Update BlackjackGame.py 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. --- Blackjack/BlackjackGame.py | 198 +++++++++++++++++++------------------ 1 file changed, 102 insertions(+), 96 deletions(-) diff --git a/Blackjack/BlackjackGame.py b/Blackjack/BlackjackGame.py index 882c7b5a..11032a30 100644 --- a/Blackjack/BlackjackGame.py +++ b/Blackjack/BlackjackGame.py @@ -1,189 +1,195 @@ -''' - -Welcome to GDB Online. -GDB online is an online compiler and debugger tool for C, C++, Python, Java, PHP, Ruby, Perl, -C#, VB, Swift, Pascal, Fortran, Haskell, Objective-C, Assembly, HTML, CSS, JS, SQLite, Prolog. -Code, Compile, Run and Debug online from anywhere in world. - -''' - import random -class Player: # - #__init__ - def __init__(self, inputname , inputage, playerType): - self.name = inputname +class Player: + def __init__(self, inputname, inputage, playerType): + self.name = inputname self.age = inputage self.cards = [] self.score = 0 - self.money = 100 - self.bet = 10 + self.money = 1000 # Initial bankroll + self.bet = 0 self.playerType = playerType self.scoreDictionary = { - '2' : 2, - '3' : 3, - '4' : 4, - '5' : 5, - '6' : 6, - '7' : 7, - '8' : 8, - '9' : 9, - '10' : 10, - 'J' : 10, - 'Q' : 10, - 'K' : 10, - 'A' : 11 + '2': 2, + '3': 3, + '4': 4, + '5': 5, + '6': 6, + '7': 7, + '8': 8, + '9': 9, + '10': 10, + 'J': 10, + 'Q': 10, + 'K': 10, + 'A': 11 } - - def playRound(): - #dosomething - #player - pass - - def drawCards(self ,inputCard ): - self.cards.append( inputCard ) + + def placeBet(self): + while True: + try: + bet = int(input("Enter your bet amount: ")) + if bet < min_bet or bet > max_bet: + print("Invalid bet amount. Please enter a bet between", min_bet, "and", max_bet) + elif bet > self.money: + print("You don't have enough money for that bet.") + else: + self.bet = bet + break + except ValueError: + print("Invalid input. Please enter a valid number.") + + def playRound(self): + if self.playerType == 'human': + while self.score < 21: + userChoice = input("Do you want to draw extra card? Answer yes or no: ") + if userChoice.lower() == 'yes': + cardDrawn = self.drawCard() + self.drawCards(cardDrawn) + print(self.cards) + self.getScore() + else: + break + + def drawCards(self, inputCard): + self.cards.append(inputCard) def getScore(self): self.score = 0 for card in self.cards: - self.score = self.score + self.scoreDictionary[card] + self.score += self.scoreDictionary[card] return self.score - + + def adjustAceValue(self): + while self.score > 21 and 'A' in self.cards: + self.score -= 10 + class GameBlackJack: - #__init__ def __init__(self, dealer, playerlist): self.playerlist = playerlist self.dealer = dealer - self.cardDeck = [] - self.genDeck() # + self.cardDeck = [] + self.genDeck() + def startRound(self): + for player in self.playerlist: + player.placeBet() def drawCardsRound1(self): - # playerlist = [player1, player2] - for i in range(2): + for i in range(2): for player in self.playerlist: cardDrawn = self.drawCard() - # player - player.drawCards( cardDrawn ) + player.drawCards(cardDrawn) - # for dealer #cardDrawn = self.cardDeck.pop( randNumber ) cardDrawn = self.drawCard() - # dealer - self.dealer.drawCards( cardDrawn ) + self.dealer.drawCards(cardDrawn) - # cards human for player in self.playerlist: if player.playerType == 'human': print(player.cards) def drawCard(self): - #randNumber = random.randint(0, 51) - randNumber = random.randint(0, len(self.cardDeck)-1 ) - # card deck cardDeck - cardDrawn = self.cardDeck.pop( randNumber ) + randNumber = random.randint(0, len(self.cardDeck)-1) + cardDrawn = self.cardDeck.pop(randNumber) return cardDrawn def drawCardsRound2(self): - # Loop through AI players for player in self.playerlist: if player.playerType == 'AI': - # check player score - while player.getScore() < 14: + while player.getScore() < 14: cardDrawn = self.drawCard() - player.drawCards( cardDrawn ) + player.drawCards(cardDrawn) elif player.playerType == 'human': userChoice = 'yes' while userChoice == 'yes': - userChoice = input("Do you want to draw extra card? Answer yes or no : ") + userChoice = input("Do you want to draw extra card? Answer yes or no: ") if userChoice == 'yes': cardDrawn = self.drawCard() - player.drawCards( cardDrawn ) + player.drawCards(cardDrawn) print(player.cards) - + def playRound3(self): - # dealer function - # dealer 14 card - while self.dealer.getScore() < 14: + while self.dealer.getScore() < 14: cardDrawn = self.drawCard() - self.dealer.drawCards( cardDrawn ) - - print("dealer.cards" + str(self.dealer.cards)) + self.dealer.drawCards(cardDrawn) + + print("dealer.cards: " + str(self.dealer.cards)) for player in self.playerlist: if (self.dealer.getScore() <= 21) and (player.getScore() <= 21): if self.dealer.getScore() > player.getScore(): - self.dealer.money = self.dealer.money + player.bet - player.money = player.money - player.bet - print('dealer wins ' + player.name ) + self.dealer.money += player.bet + player.money -= player.bet + print('dealer wins ' + player.name) elif self.dealer.getScore() < player.getScore(): - self.dealer.money = self.dealer.money - player.bet - player.money = player.money + player.bet - print('dealer loses ' + player.name ) + self.dealer.money -= player.bet + player.money += player.bet + print('dealer loses ' + player.name) else: - pass - print('dealer draw ' + player.name ) + print('dealer draw ' + player.name) elif (self.dealer.getScore() <= 21) and (player.getScore() > 21): - print('dealer wins ' + player.name ) - + print('dealer wins ' + player.name) + elif (self.dealer.getScore() > 21) and (player.getScore() <= 21): - print('dealer loses ' + player.name ) - self.dealer.money = self.dealer.money + player.bet - player.money = player.money - player.bet + print('dealer loses ' + player.name) + self.dealer.money -= player.bet + player.money += player.bet elif (self.dealer.getScore() > 21) and (player.getScore() > 21): - print('dealer wins ' + player.name ) - player.money = player.money + player.bet - print('dealer loses ' + player.name ) + print('dealer wins ' + player.name) + player.money += player.bet + print('dealer loses ' + player.name) if player.playerType == "human": print("My Money: " + str(player.money)) - def removeLossers(self): i = 0 for player in self.playerlist: if player.money <= 0: self.playerlist.pop(i) - i = i + 1 - + i += 1 + def refreshPlayerCard(self): for player in self.playerlist: player.cards = [] dealer.cards = [] - + def genDeck(self): cardType = ['2','3','4','5','6','7','8','9','10','J','Q','K','A'] self.cardDeck = [] for card in cardType: - self.cardDeck.append(card) self.cardDeck.append(card) self.cardDeck.append(card) self.cardDeck.append(card) - #print(cardType) - #print(self.cardDeck) + self.cardDeck.append(card) -# Play -player1 = Player('chawin', 22, 'human') +# Set betting limits +min_bet = 5 +max_bet = 100 + +# Players +player1 = Player('George', 22, 'human') player2 = Player('soon', 21, 'AI') player3 = Player('PAXI', 28, 'AI') player4 = Player('cactus', 41, 'AI') dealer = Player('Mc Donald', 78, 'AI') -playerlist = [ player1, player2, player3, player4 ] +playerlist = [player1, player2, player3, player4] -game1 = GameBlackJack( dealer, playerlist ) +game1 = GameBlackJack(dealer, playerlist) gameRound = 0 while gameRound < 2: print("Round " + str(gameRound + 1)) + game1.startRound() # Prompt players to place bets game1.genDeck() game1.refreshPlayerCard() game1.drawCardsRound1() game1.drawCardsRound2() game1.playRound3() - game1.removeLossers - gameRound = gameRound + 1 - + game1.removeLossers() + gameRound += 1 \ No newline at end of file