Made Blackjack functions more specific

This commit is contained in:
2023-01-05 16:26:26 +10:00
parent 7704efc11f
commit 8778862986

View File

@@ -27,21 +27,13 @@ def convertNumberToCard(cardNumber):
return "{value}{suit} ".format(value=str(cardNumber), suit=cardSuit) return "{value}{suit} ".format(value=str(cardNumber), suit=cardSuit)
def generateDeck(): def generateDeck():
deck = [] return [x for x in range(0, 51)]
while len(deck) < 52:
newCard = random.randint(0, 51)
if deck.count(newCard) == 0:
deck.append(newCard)
return deck
def addCardToHand(hand, deck): def addCardToHand(hand, deck):
card = deck.pop(0) card = deck.pop(0)
hand.append(card) hand.append(card)
def generateHand(hand, deck, handSize = 2): def generateHand(hand, deck, handSize = 2):
i = 0 i = 0
while i < handSize: while i < handSize:
@@ -67,35 +59,35 @@ def getHandTotal(hand):
return i return i
class BlackJack: class BlackJack:
def __init__(self, recv, send): def __init__(self):
self.playerTurn = True self.playerTurn = True
self.deck = generateDeck() self.deck = generateDeck()
random.shuffle(self.deck)
self.discard = []
self.playerHand = [] self.playerHand = []
generateHand(self.playerHand, self.deck)
self.dealerHand = [] self.dealerHand = []
generateHand(self.dealerHand, self.deck)
self.recv = recv
self.send = send
self.ledger = Ledger.Ledger() self.ledger = Ledger.Ledger()
def getPH(self): def getPH(self):
return self.playerHand return self.playerHand
def returnCards(self): def getDH(self):
self.playerHand.clear() return self.dealerHand
self.dealerHand.clear()
def shuffle(self): def returnCards(self):
self.returnCards() self.discard.extend(self.playerHand)
self.deck = generateDeck() self.playerHand.clear()
self.discard.extend(self.dealerHand)
self.playerHand.clear()
def deal(self):
generateHand(self.playerHand, self.deck) generateHand(self.playerHand, self.deck)
generateHand(self.dealerHand, self.deck) generateHand(self.dealerHand, self.deck)
def getDH(self): def shuffle(self):
return self.dealerHand self.deck.extend(self.discard)
self.discard.clear()
random.shuffle(self.deck)
def stand(self): def stand(self):
if self.playerTurn: if self.playerTurn:
@@ -136,7 +128,7 @@ class BlackJack:
gameOver = True gameOver = True
return gameOver return gameOver
async def play_game(self, ID, bet): async def play_game(self, ID, bet, recv, send):
validInput = False validInput = False
gameOver = False gameOver = False
playerStood = False playerStood = False
@@ -146,15 +138,16 @@ class BlackJack:
playerStats = self.ledger.readLedger playerStats = self.ledger.readLedger
while not gameOver: while not gameOver:
self.deal()
playerWinState = self.checkHandState(self.playerHand) playerWinState = self.checkHandState(self.playerHand)
dealerWinState = self.checkHandState(self.dealerHand) dealerWinState = self.checkHandState(self.dealerHand)
gameOver = self.checkGameOver(playerWinState) or self.checkGameOver(dealerWinState) gameOver = self.checkGameOver(playerWinState) or self.checkGameOver(dealerWinState)
if gameOver: if gameOver:
continue 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]) + "??") 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: while not validInput:
if play == "h": if play == "h":
self.hit() self.hit()
@@ -184,21 +177,27 @@ class BlackJack:
if self.checkGameOver(dealerWinState): if self.checkGameOver(dealerWinState):
continue 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)) "\n" + "Dealers hand = " + str(getHandTotal(self.dealerHand)) + ": " + handNumbersToCards(self.dealerHand))
if playerWinState == "w": if playerWinState == "w":
await self.send("You won!") await send("You won!")
win = (2*bet, 1, 0, ID) win = (2*bet, 1, 0, ID)
self.ledger.updateLedger(playerStats, win) self.ledger.updateLedger(playerStats, win)
elif playerWinState == "l": elif playerWinState == "l":
await self.send("You busted!") await send("You busted!")
loss = (-bet, 0, 1, ID) loss = (-bet, 0, 1, ID)
self.ledger.updateLedger(playerStats, loss) self.ledger.updateLedger(playerStats, loss)
elif dealerWinState == "w": 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) loss = (-bet, 0, 1, ID)
self.ledger.updateLedger(playerStats, loss) self.ledger.updateLedger(playerStats, loss)
elif dealerWinState == "l": elif dealerWinState == "l":
await self.send("The Dealer busted before you!") await send("The Dealer busted before you!")
win = (2*bet, 1, 0, ID) win = (2*bet, 1, 0, ID)
self.ledger.updateLedger(playerStats, win) self.ledger.updateLedger(playerStats, win)
if len(self.deck) < 0.25 * 52:
await send("Shuffling Deck")
self.returnCards()
self.shuffle()