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:
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()
In Python, the break statement provides you with the opportunity to exit out of a loop when an external condition is triggered. You'll put the break statement within the block of code under your loop statement, usually after a conditional if statement.
When break is executed in the inner loop, it only exits from the inner loop and the outer loop continues.
Create a flag at start of outer loop as FALSE ... Then in inner loop, set it TRUE when needed to break 2 loops, there you go, now you will break the inner loop, and check the flag in outer loop, if it is true, the break out of this outer loop too.
while ...:
flag = 0
while ...:
# point where you want 2 loops to break
flag = 1
break
# break out of this too :P
if flag == 1:
break
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With