Skip to content

Instantly share code, notes, and snippets.

@Shudouken
Created September 2, 2014 19:56
Show Gist options
  • Save Shudouken/5d381e2f35c57fc8a34a to your computer and use it in GitHub Desktop.
Save Shudouken/5d381e2f35c57fc8a34a to your computer and use it in GitHub Desktop.
Blackjack
import random
showRemainingCards = True
def card(num):
if num == 1:
card = 'A'
if num >= 2 and num <= 10:
card = str(num)
if num == 11:
card = 'J'
if num == 12:
card = 'Q'
if num == 13:
card = 'K'
return card
def suit(num):
if num == 1:
suit = u'\u2660' #unicode for card suits
if num == 2:
suit = u'\u2663'
if num == 3:
suit = u'\u2665'
if num == 4:
suit = u'\u2666'
return suit
def printCardName(num):
cardnum = (num % 13) + 1
suitnum = (num % 4) + 1
if suitnum > 2:
print '\033[31m' + card(cardnum) + suit(suitnum) + '\033[0m',
else:
print card(cardnum) + suit(suitnum),
def value(num, mode):
cardnum = (num % 13) + 1
if cardnum == 1 and mode == 1: #Ace is 1
cardval = 1
if cardnum == 1 and mode != 1: #or 11
cardval = 11
if cardnum >= 2 and cardnum <= 10:
cardval = cardnum
if cardnum >= 11:
cardval = 10
return cardval
def calcTotalValue(hand):
total1 = 0
total11 = 0
for x in range(len(hand)):
total1 += value(hand[x], 1)
total11 += value(hand[x], 11)
if total1 == total11 or total11 >= 22:
return total1
else:
return total11
def shuffle():
count = 1
random.shuffle(deck)
def printHand(hand):
for x in range(len(hand)):
printCardName(hand[x])
print '(' + str(calcTotalValue(hand)) + ')'
def draw(hand):
global count
if count > 51:
shuffle()
count = 1
print 'Last cards reached, shuffling deck...'
hand.append(deck[count])
count += 1
def turn(command):
if calcTotalValue(dealer) < 17:
draw(dealer)
if command != HOLD:
draw(player)
print 'Dealer hand:',
printHand(dealer)
print 'Player hand:',
printHand(player)
if showRemainingCards:
print 'Remaining cards: ' + str(53 - count)
return checkWinner()
def checkWinner(check = False):
if calcTotalValue(dealer) == 21:
print 'Dealer wins (Blackjack)!'
return True
elif calcTotalValue(player) == 21:
print 'Player wins (Blackjack)!'
return True
elif calcTotalValue(dealer) > 21:
print 'Dealer BTFO, Player wins!'
return True
elif calcTotalValue(player) > 21:
print 'Player BTFO, Dealer wins!'
return True
elif check:
if calcTotalValue(dealer) >= calcTotalValue(player):
print 'Dealer wins!'
else:
print 'Player wins!'
return True
return False
def newGame():
print 'Starting new game...'
del dealer[:]
del player[:]
RESET = 0
QUIT = 1
HOLD = 2
def commandPrompt():
n = raw_input("Enter command: ")
if n.strip() == 'q':
print 'Bye!'
return QUIT
elif n.strip() == 'h':
if calcTotalValue(dealer) >= 17:
print 'Evaluating Winner...',
checkWinner(True)
print ''
newGame()
return RESET
return HOLD
elif n.strip() == 'n':
checkWinner(True)
print ''
newGame()
else:
return RESET
print 'Welcome to Blackjack!'
print 'How-to:'
print ' press q to quit'
print ' press h to hold (not drawing a card)'
print ' press n to forfeit and start a new game'
print ' press any other button to draw'
print ''
print 'The Dealer will automatically draw until he reaches a total hand'
print 'value of 17 or more'
print ''
#initial setup
deck=[i for i in range(0,52)]
dealer=[]
player=[]
count=1
shuffle()
command_return_value = RESET
won = False
while True:
won = turn(command_return_value)
if won == True:
command_return_value = RESET
won = False
print ''
newGame()
else:
command_return_value = commandPrompt()
if command_return_value == QUIT:
break
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment