From 877886298631470c342e8a653c994f19b1b7c90f Mon Sep 17 00:00:00 2001 From: BigGamerGary Date: Thu, 5 Jan 2023 16:26:26 +1000 Subject: [PATCH] Made Blackjack functions more specific --- BlackJack.py | 65 ++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/BlackJack.py b/BlackJack.py index 7036b1d..443d71c 100644 --- a/BlackJack.py +++ b/BlackJack.py @@ -27,21 +27,13 @@ def convertNumberToCard(cardNumber): return "{value}{suit} ".format(value=str(cardNumber), suit=cardSuit) - def generateDeck(): - deck = [] - while len(deck) < 52: - newCard = random.randint(0, 51) - if deck.count(newCard) == 0: - deck.append(newCard) - return deck - + return [x for x in range(0, 51)] def addCardToHand(hand, deck): card = deck.pop(0) hand.append(card) - def generateHand(hand, deck, handSize = 2): i = 0 while i < handSize: @@ -67,35 +59,35 @@ def getHandTotal(hand): return i class BlackJack: - def __init__(self, recv, send): + def __init__(self): self.playerTurn = True - self.deck = generateDeck() + random.shuffle(self.deck) + self.discard = [] self.playerHand = [] - generateHand(self.playerHand, self.deck) self.dealerHand = [] - generateHand(self.dealerHand, self.deck) - - self.recv = recv - self.send = send - self.ledger = Ledger.Ledger() def getPH(self): return self.playerHand - def returnCards(self): - self.playerHand.clear() - self.dealerHand.clear() + def getDH(self): + return self.dealerHand - def shuffle(self): - self.returnCards() - self.deck = generateDeck() + def returnCards(self): + self.discard.extend(self.playerHand) + self.playerHand.clear() + self.discard.extend(self.dealerHand) + self.playerHand.clear() + + def deal(self): generateHand(self.playerHand, self.deck) generateHand(self.dealerHand, self.deck) - def getDH(self): - return self.dealerHand + def shuffle(self): + self.deck.extend(self.discard) + self.discard.clear() + random.shuffle(self.deck) def stand(self): if self.playerTurn: @@ -136,7 +128,7 @@ class BlackJack: gameOver = True return gameOver - async def play_game(self, ID, bet): + async def play_game(self, ID, bet, recv, send): validInput = False gameOver = False playerStood = False @@ -146,15 +138,16 @@ class BlackJack: playerStats = self.ledger.readLedger while not gameOver: + self.deal() playerWinState = self.checkHandState(self.playerHand) dealerWinState = self.checkHandState(self.dealerHand) gameOver = self.checkGameOver(playerWinState) or self.checkGameOver(dealerWinState) if gameOver: continue - await self.send("Players hand = " + str(getHandTotal(self.playerHand)) + ": " + handNumbersToCards( + await send("Players hand = " + str(getHandTotal(self.playerHand)) + ": " + handNumbersToCards( self.playerHand) + "\n" + "Dealers hand = ??: " + convertNumberToCard(self.dealerHand[0]) + "??") - play = await self.recv("Hit or Stand? (h/s)") + play = await recv("Hit or Stand? (h/s)") while not validInput: if play == "h": self.hit() @@ -184,21 +177,27 @@ class BlackJack: if self.checkGameOver(dealerWinState): continue - await self.send("Players hand = " + str(getHandTotal(self.playerHand)) + ": " + handNumbersToCards(self.playerHand) + + await send("Players hand = " + str(getHandTotal(self.playerHand)) + ": " + handNumbersToCards(self.playerHand) + "\n" + "Dealers hand = " + str(getHandTotal(self.dealerHand)) + ": " + handNumbersToCards(self.dealerHand)) if playerWinState == "w": - await self.send("You won!") + await send("You won!") win = (2*bet, 1, 0, ID) self.ledger.updateLedger(playerStats, win) elif playerWinState == "l": - await self.send("You busted!") + await send("You busted!") loss = (-bet, 0, 1, ID) self.ledger.updateLedger(playerStats, loss) elif dealerWinState == "w": - await self.send("The Dealer reached 21 before you!") + await send("The Dealer reached 21 before you!") loss = (-bet, 0, 1, ID) self.ledger.updateLedger(playerStats, loss) elif dealerWinState == "l": - await self.send("The Dealer busted before you!") + await send("The Dealer busted before you!") win = (2*bet, 1, 0, ID) self.ledger.updateLedger(playerStats, win) + + if len(self.deck) < 0.25 * 52: + await send("Shuffling Deck") + self.returnCards() + self.shuffle() +