There has to be a better way to do this... Any ideas? This is a basic blackjack game for CS1.
2 main things bugging me:
- How do I break out of the loop twice? Ex. The dealer wins, and and then it asks "stay or hit?", because it's still on the player's turn/loop.
- The breaks seem really cruddy. There's so much copy-pasted code.
Thanks! Any help appreciated.
import random
import sys
# game, hand, deck
class Deck:
    theDeck = []
    card = 0
    def createDeck(self):
        for x in range(2, 15):
            for y in range(1, 5):
                self.theDeck.append(x)
    def extractCard(self):
        card = self.theDeck.pop(random.randrange(1, len(self.theDeck) - 1))
        return card
class Game:
    dealerTotal = [0, 0]
    playerTotal = 0
    deck = Deck()
    deck.createDeck()
    def reset(self):
        self.dealerTotal = [0, 0]
        self.playerTotal = 0
    def dealerEnd(self):
        if self.dealerTotal[0] == 21 or self.dealerTotal[1] == 21:
            print("BLACKJACK! Game over.\n\nDEALER'S TURN")
            self.reset()
            return True    
        elif self.dealerTotal[0] > 21 and self.dealerTotal[1] > 21:
            print("PLAYER WINS! Game over.\n\nDEALER'S TURN")
            self.reset()
            return True
        return False
    def playerEnd(self):
        if self.playerTotal == 21:
            print("BLACKJACK! Game over.\n\nDEALER'S TURN")
            self.reset()
            return True
        elif self.playerTotal > 21:
            print("DEALER WINS! Game over.\n\nDEALER'S TURN")
            self.reset()
            return True
        return False
    def dealerChangeTotal(self,hold):
        self.dealerTotal[0] += hold
        self.dealerTotal[1] += hold
        print("Total ::"), self.dealerTotal
        self.dealerEnd()
    def playerChangeTotal(self,hold):
        self.playerTotal += hold
        print("Total ::"), self.playerTotal
        self.playerEnd()
    def play(self):
        while len(self.deck.theDeck) > 0:
            print("DEALER'S TURN")
            if self.dealerTotal[0] >= 16 or self.dealerTotal[1] >= 16:
                print("I can't take. Your go.")
            while self.dealerTotal[0] < 16 or self.dealerTotal[1] < 16:
                hold = self.deck.extractCard()
                if hold == 14:
                    print("Card :: ace")
                    self.dealerTotal[0] += 1
                    self.dealerTotal[1] += 11
                    print("Total ::"), self.dealerTotal
                    if self.dealerEnd() == True:
                        break
                elif hold == 13:
                    hold = 10
                    print("Card :: king")
                    self.dealerChangeTotal(hold)
                    if self.dealerEnd() == True:
                        break
                elif hold == 12:
                    hold = 10
                    print("Card :: queen")
                    self.dealerChangeTotal(hold)
                    if self.dealerEnd() == True:
                        break
                elif hold == 11:
                    hold = 10
                    print("Card :: jack")
                    self.dealerChangeTotal(hold)
                    if self.dealerEnd() == True:
                        break
                else:
                    print("Card ::"), hold
                    self.dealerChangeTotal(hold)
                    if self.dealerEnd() == True:
                        break
            print("\n\nPLAYER'S TURN")
            while True:
                hold = self.deck.extractCard()
                if hold == 14:
                    print("Card :: ace")
                    self.playerTotal += input("Do you want a 1 or an 11? ")
                    print("Total ::"), self.playerTotal
                    response = raw_input("Stand or hit? ")
                    if response == "stand":
                        break
                    if self.playerEnd() == True:
                        break
                elif hold == 13:
                    hold = 10
                    print("Card :: king")
                    self.playerChangeTotal(hold)
                    response = raw_input("Stand or hit? ")
                    if response == "stand":
                        break
                    if self.playerEnd() == True:
                        break
                elif hold == 12:
                    hold = 10
                    print("Card :: queen")
                    self.playerChangeTotal(hold)
                    response = raw_input("Stand or hit? ")
                    if response == "stand":
                        break
                    if self.playerEnd() == True:
                        break
                elif hold == 11:
                    hold = 10
                    print("Card :: jack")
                    self.playerChangeTotal(hold)
                    response = raw_input("Stand or hit? ")
                    if response == "stand":
                        break
                    if self.playerEnd() == True:
                        break
                else:
                    print("Card ::"), hold
                    self.playerChangeTotal(hold)
                    response = raw_input("Stand or hit? ")
                    if response == "stand":
                        break
                    if self.playerEnd() == True:
                        break
            print("\n\n")
#... Main?
game = Game()
game.play()
 
    