![]() |
|
![]() |
|
|
Thread Tools | Display Modes |
|
|
#1 |
|
Hobbyist Programmer
|
[Python] BlackJack
A BlackJack game!
Possibly my biggest script/programme yet. Not particularly big, but I'm not particularly good either ...# # # # # # # # # # # # # # # #
# BlackJack game by UnKnown X #
# # # # # # # # # # # # # # # #
import random, time
player_mode, dealer_mode = "normal", "normal"
player_cards, dealer_cards = [], []
deck = []
def confirm(message):
"""Confirm message
Display a message, get yes/no answer from Player.
Return 1 for yes, 0 for no."""
print str(message) + "\n"
while True:
try:
answer = raw_input("> ")
except ValueError:
print "ValueError exception encountered! Try again."
continue
if answer.lower() != "yes" and answer.lower() != "y" and answer.lower() != "no" and answer.lower() != "n":
print "Invalid answer! Try again."
continue
break
if answer.lower() == "yes" or answer.lower() == "y":
answer = 1
else:
answer = 0
return answer
def deal_cards(player_dealer, show_hide):
"""Deal cards
Call with two strings.
First is "player" or "dealer" for dealing cards to the Player or Dealer respectively.
Second is "show" or "hide" to have the card's information visible or not.
Function takes a random card and removes it from the deck,
adding it to the Player's or Dealer's hand in a list in the format TCS,
where T is a one-letter representation of the card type, C of the card
and S for whether or not to show the card ("S" or "H")."""
while True:
if deck[0] == [] and deck[1] == [] and deck[2] == [] and deck[3] == []:
return None
card_type_num = random.randrange(4)
card_num = random.randrange(len(deck[card_type_num]))
card_type = ['Spades', 'Hearts', 'Diamonds', 'Clubs'][card_type_num]
card = ['2','3','4','5','6','7','8','9','10','Jack','Queen','King','Ace'][card_num]
try:
deck[card_type_num].remove(card)
except ValueError:
continue
card_identifier = str(['Spades', 'Hearts', 'Diamonds', 'Clubs'][card_type_num])[0]
card_identifier += str(['2','3','4','5','6','7','8','9','10','Jack','Queen','King','Ace'][card_num])[0]
card_identifier += show_hide[0]
if player_dealer == "player":
global player_cards
player_cards.append(card_identifier)
elif player_dealer == "dealer":
global dealer_cards
dealer_cards.append(card_identifier)
return [card_type, card, show_hide]
def get_string(message):
"""Get string from Player
Print message to Player, ask for and return input."""
print str(message) + "\n"
while True:
try:
the_string = raw_input("> ")
except ValueError:
print "ValueError exception encountered! Try again."
continue
if the_string == "":
print "Error! Empty string! Try again."
continue
break
return the_string
def get_wager(message, money):
"""Get wager from Player
Get and return floating point number from Player."""
print message + "\n"
while True:
try:
wager_try = raw_input("> ")
wager = float(wager_try)
except ValueError:
print "'%s' is not a number! Try again." % wager_try
continue
if wager < 0.01 or wager > float(money):
print "Error! Cannot have %.2f as wager! Try again." % wager
continue
break
return float("%.2f" % wager)
def intro():
"""Intro
Print an intro."""
print "* "*30 + "*"
print "* BlackJack game by UnKnown X (demiblob@gmail.com) (C) 2006 *"
print "* "*30 + "*\n\n"
return
def move_choose_dealer():
"""Choose Dealer's move
"Hit" or "Stand", depending on Dealer's score."""
if score_dealer() < 17:
return "Hit"
else:
return "Stand"
def move_choose_player(start_round):
"""Choose Player's move
Show available moves for Player, return input when valid."""
while True:
if start_round == True:
print "Available moves: Hit, Stand, Double"
else:
print "Available moves: Hit, Stand"
player_move = get_string("Choose your move.").capitalize()
if start_round == True:
if player_move != "S" and player_move != "Stand" and player_move != "H" and player_move != "Hit" and player_move != "D" and player_move != "Double":
print "Error: Invalid move '%s'! Try again." % player_move
continue
else:
if player_move != "S" and player_move != "Stand" and player_move != "H" and player_move != "Hit":
print "Error: Invalid move '%s'! Try again." % player_move
if player_move == "S" or player_move == "Stand":
return "Stand"
elif player_move == "H" or player_move == "Hit":
return "Hit"
elif player_move == "D" or player_move == "Double":
return "Double"
else:
print "Error: '%s' is not a valid move! Try again." % player_move
continue
def print_cards(player_name, hide):
"""Print cards
Print all the cards. See function 'deal_cards' for more info about the cards."""
print "\n\nDealer's Hand\n"
dealer_print = ""
for item in dealer_cards:
card_type = item[0]
card = item[1]
show_hide = item[2]
if show_hide == "h" and hide == True:
dealer_print += "*hidden* "
else:
if card == "2":
dealer_print += "2"
elif card == "3":
dealer_print += "3"
elif card == "4":
dealer_print += "4"
elif card == "5":
dealer_print += "5"
elif card == "6":
dealer_print += "6"
elif card == "7":
dealer_print += "7"
elif card == "8":
dealer_print += "8"
elif card == "9":
dealer_print += "9"
elif card == "1":
dealer_print += "10"
elif card == "J":
dealer_print += "Jack"
elif card == "Q":
dealer_print += "Queen"
elif card == "K":
dealer_print += "King"
elif card == "A":
dealer_print += "Ace"
dealer_print += " of "
if card_type == "S":
dealer_print += "Spades"
elif card_type == "H":
dealer_print += "Hearts"
elif card_type == "D":
dealer_print += "Diamonds"
elif card_type == "C":
dealer_print += "Clubs"
dealer_print += " "
print dealer_print
if show_hide == "h" and hide == True:
print "Score: Hidden"
else:
print "Score:", score_dealer()
if player_name[len(player_name)-1].lower() == "s" or player_name[len(player_name)-1].lower() == "x":
apostrophe = "'"
else:
apostrophe = "'s"
print "\n\n%s%s Hand\n" % (player_name, apostrophe)
player_print = ""
for item in player_cards:
card_type = item[0]
card = item[1]
if card == "2":
player_print += "2"
elif card == "3":
player_print += "3"
elif card == "4":
player_print += "4"
elif card == "5":
player_print += "5"
elif card == "6":
player_print += "6"
elif card == "7":
player_print += "7"
elif card == "8":
player_print += "8"
elif card == "9":
player_print += "9"
elif card == "1":
player_print += "10"
elif card == "J":
player_print += "Jack"
elif card == "Q":
player_print += "Queen"
elif card == "K":
player_print += "King"
elif card == "A":
player_print += "Ace"
player_print += " of "
if card_type == "S":
player_print += "Spades"
elif card_type == "H":
player_print += "Hearts"
elif card_type == "D":
player_print += "Diamonds"
elif card_type == "C":
player_print += "Clubs"
player_print += " "
print player_print
print "Score:", score_player()
print "\n\n"
return
def restock_deck():
"""Restock deck
Re-initialize the deck, which is a list containing four lists of thirteen strings."""
spades = ['2','3','4','5','6','7','8','9','10','Jack','Queen','King','Ace']
hearts = ['2','3','4','5','6','7','8','9','10','Jack','Queen','King','Ace']
diamonds = ['2','3','4','5','6','7','8','9','10','Jack','Queen','King','Ace']
clubs = ['2','3','4','5','6','7','8','9','10','Jack','Queen','King','Ace']
global deck
deck = [spades,hearts,diamonds,clubs]
return deck
def score_dealer():
"""Dealer's score
Get and return Dealer's score."""
global dealer_cards
score = 0
for item in dealer_cards:
if item[1] == "2":
score += 2
elif item[1] == "3":
score += 3
elif item[1] == "4":
score += 4
elif item[1] == "5":
score += 5
elif item[1] == "6":
score += 6
elif item[1] == "7":
score += 7
elif item[1] == "8":
score += 8
elif item[1] == "9":
score += 9
elif item[1] == "1":
score += 10
elif item[1] == "J":
score += 2
elif item[1] == "Q":
score += 3
elif item[1] == "K":
score += 4
elif item[1] == "A":
if score + 11 > 21:
score += 1
else:
score += 11
return score
def score_player():
"""Player's score
Get and return Player's score."""
global player_cards
score = 0
for item in player_cards:
if item[1] == "2":
score += 2
elif item[1] == "3":
score += 3
elif item[1] == "4":
score += 4
elif item[1] == "5":
score += 5
elif item[1] == "6":
score += 6
elif item[1] == "7":
score += 7
elif item[1] == "8":
score += 8
elif item[1] == "9":
score += 9
elif item[1] == "1":
score += 10
elif item[1] == "J":
score += 2
elif item[1] == "Q":
score += 3
elif item[1] == "K":
score += 4
elif item[1] == "A":
if score + 11 > 21:
score += 1
else:
score += 11
return score
def time_generate():
"""Generate time
in the format: Day DDth Month, YYYY at HH:MM:SS."""
timedate = ""
timedate += time.strftime("%a ", time.localtime())
timedate += str(time.localtime()[2])
if time.localtime()[2] % 10 == 1 and time.localtime()[2] % 100 != 11:
timedate += "st"
elif time.localtime()[2] % 10 == 2 and time.localtime()[2] % 100 != 12:
timedate += "nd"
elif time.localtime()[2] % 10 == 3 and time.localtime()[2] % 100 != 13:
timedate += "rd"
else:
timedate += "th"
timedate += " "
if time.localtime()[1] == 1:
timedate += "January"
elif time.localtime()[1] == 2:
timedate += "February"
elif time.localtime()[1] == 3:
timedate += "March"
elif time.localtime()[1] == 4:
timedate += "April"
elif time.localtime()[1] == 5:
timedate += "May"
elif time.localtime()[1] == 6:
timedate += "June"
elif time.localtime()[1] == 7:
timedate += "July"
elif time.localtime()[1] == 8:
timedate += "August"
elif time.localtime()[1] == 9:
timedate += "September"
elif time.localtime()[1] == 10:
timedate += "October"
elif time.localtime()[1] == 11:
timedate += "November"
elif time.localtime()[1] == 12:
timedate += "December"
else:
timedate += "Unknown month"
timedate += ", " + str(time.localtime()[0])
timedate += " at %02d" % time.localtime()[3]
timedate += ":%02d" % time.localtime()[4]
timedate += ":%02d" % time.localtime()[5]
return timedate
def wait(message):
raw_input(message)
def write_cards(player_name, hide):
"""Write cards to file
Write all the cards to file.
See function 'deal_cards' for more info about the cards."""
f.write("\n\nDealer's Hand on %s\n" % time_generate())
dealer_print = "-- "
for item in dealer_cards:
card_type = item[0]
card = item[1]
show_hide = item[2]
if card == "2":
dealer_print += "2"
elif card == "3":
dealer_print += "3"
elif card == "4":
dealer_print += "4"
elif card == "5":
dealer_print += "5"
elif card == "6":
dealer_print += "6"
elif card == "7":
dealer_print += "7"
elif card == "8":
dealer_print += "8"
elif card == "9":
dealer_print += "9"
elif card == "1":
dealer_print += "10"
elif card == "J":
dealer_print += "Jack"
elif card == "Q":
dealer_print += "Queen"
elif card == "K":
dealer_print += "King"
elif card == "A":
dealer_print += "Ace"
dealer_print += " of "
if card_type == "S":
dealer_print += "Spades"
elif card_type == "H":
dealer_print += "Hearts"
elif card_type == "D":
dealer_print += "Diamonds"
elif card_type == "C":
dealer_print += "Clubs"
if show_hide == "h" and hide == True:
dealer_print += " (hidden)"
dealer_print += " "
f.write(dealer_print + "\n")
f.write("-- Score: %s\n\n" % score_dealer())
if player_name[len(player_name)-1].lower() == "s" or player_name[len(player_name)-1].lower() == "x":
apostrophe = "'"
else:
apostrophe = "'s"
f.write("%s%s Hand on %s\n" % (player_name, apostrophe, time_generate()))
player_print = "-- "
for item in player_cards:
card_type = item[0]
card = item[1]
if card == "2":
player_print += "2"
elif card == "3":
player_print += "3"
elif card == "4":
player_print += "4"
elif card == "5":
player_print += "5"
elif card == "6":
player_print += "6"
elif card == "7":
player_print += "7"
elif card == "8":
player_print += "8"
elif card == "9":
player_print += "9"
elif card == "1":
player_print += "10"
elif card == "J":
player_print += "Jack"
elif card == "Q":
player_print += "Queen"
elif card == "K":
player_print += "King"
elif card == "A":
player_print += "Ace"
player_print += " of "
if card_type == "S":
player_print += "Spades"
elif card_type == "H":
player_print += "Hearts"
elif card_type == "D":
player_print += "Diamonds"
elif card_type == "C":
player_print += "Clubs"
player_print += " "
f.write(player_print + "\n")
f.write("-- Score: %s\n" % score_player())
return
def main():
"""BlackJack
Play BlackJack."""
play = True
global deck, player_cards, dealer_cards, f, player_mode, dealer_mode
while play == True:
player_name = get_string("Please input your name.")
f.write("BlackJack log for " + player_name + " on " + str(time_generate()) + "\n\n\n\n")
wins, losses, draws, money = 0, 0, 0, 100.00
deck = []
play_player = True
while play_player == True:
player_mode, dealer_mode = "normal", "normal"
f.write("%s\n\n\nStarting round %s on %s with $%s. " % ("-"*80, wins + losses + draws + 1, time_generate(), "%.2f" % money))
print "\n\nStarting round %d on %s with $%.2f!" % (wins + losses + draws + 1, time_generate(), money), "\n"
wager = get_wager("Choose wager.", money)
f.write("Wager: $" + "%.2f" % wager + "\n")
deck = restock_deck()
player_cards, dealer_cards = [], []
deal_cards("player", "show")
deal_cards("dealer", "show")
deal_cards("player", "show")
deal_cards("dealer", "hide")
print_cards(player_name, True)
write_cards(player_name, True)
f.write("\n")
if score_player() == 21 and score_dealer() != 21:
print_cards(player_name, False)
write_cards(player_name, False)
f.write("\n")
print "BlackJack!!"
wager *= 2
money += wager
print "\nPayout: $%.2f" % wager
f.write("\n%s got a BlackJack on %s!\n-- Payout: $%s\n-- Money: $%s\n\n" % (player_name, time_generate(), "%.2f" % wager, "%.2f" % money))
wins += 1
break
elif score_player() == 21 and score_dealer() == 21:
print_cards(player_name, False)
write_cards(player_name, False)
f.write("\n")
print "Draw!"
f.write("\nThere was a draw on %s.\n-- Money: $%s\n\n" % (time_generate(), "%.2f" % money))
draws += 1
break
start_round = True
while True:
if player_mode == "normal":
player_move = move_choose_player(start_round)
f.write("\n** %s %ss on %s.\n" % (player_name, player_move, time_generate()))
if player_move == "Hit":
deal_cards("player", "show")
elif player_move == "Stand":
player_mode = "stand"
elif player_move == "Double":
deal_cards("player", "show")
player_mode = "double"
wager *= 2
else:
f.write("\n** %s is standing on %s.\n" % (player_name, time_generate()))
if dealer_mode == "normal":
dealer_move = move_choose_dealer()
f.write("** Dealer %ss on %s.\n" % (dealer_move, time_generate()))
print "\nDealer %ss." % dealer_move
if dealer_move == "Hit":
deal_cards("dealer", "hide")
elif dealer_move == "Stand":
dealer_mode = "stand"
else:
f.write("** Dealer is standing on %s.\n" % (time_generate()))
print "\nDealer is standing."
if score_player() > 21:
print_cards(player_name, False)
write_cards(player_name, False)
f.write("\n")
print "Busted!"
money -= wager
print "\nMoney lost: $%.2f" % wager
f.write("\n%s lost on %s.\n-- Money lost: $%s\n-- Money: $%s\n\n" % (player_name, time_generate(), "%.2f" % wager, "%.2f" % money))
losses += 1
break
elif score_dealer() > 21:
print_cards(player_name, False)
write_cards(player_name, False)
f.write("\n")
print "You win!"
money += wager
print "\nPayout: $%.2f" % wager
f.write("\n%s got a BlackJack on %s!\n-- Payout: $%s\n-- Money: $%s\n\n" % (player_name, time_generate(), "%.2f" % wager, "%.2f" % money))
wins += 1
break
elif score_player() == score_dealer() and dealer_mode == "stand" and (player_mode == "stand" or player_mode == "double"):
print_cards(player_name, False)
write_cards(player_name, False)
f.write("\n")
print "Draw!"
f.write("\nThere was a draw on %s.\n-- Money: $%s\n\n" % (time_generate(), "%.2f" % money))
draws += 1
break
elif score_player() > score_dealer() and dealer_mode == "stand" and (player_mode == "stand" or player_mode == "double"):
print_cards(player_name, False)
write_cards(player_name, False)
f.write("\n")
print "You win!"
money += wager
print "\nPayout: $%.2f" % wager
f.write("\n%s got a BlackJack on %s!\n-- Payout: $%s\n-- Money: $%s\n\n" % (player_name, time_generate(), "%.2f" % wager, "%.2f" % money))
wins += 1
break
elif score_player() < score_dealer() and dealer_mode == "stand" and (player_mode == "stand" or player_mode == "double"):
print_cards(player_name, False)
write_cards(player_name, False)
f.write("\n")
print "You lose!"
money -= wager
print "\nMoney lost: $%.2f" % wager
f.write("\n%s lost on %s.\n-- Money lost: $%s\n-- Money: $%s\n\n" % (player_name, time_generate(), "%.2f" % wager, "%.2f" % money))
losses += 1
break
print_cards(player_name, True)
write_cards(player_name, True)
f.write("\n")
start_round = False
print "\nMoney: $%.2f" % money
if money < 0.01:
print "\nSorry, you don't have enough cash to play!\n"
f.write("\n")
break
play_player = confirm("\n\nPlay again?")
f.write("\n")
f.write("%s\n\n\nEnded game on %s.\n-- Wins: %s\n-- Losses: %s\n-- Draws: %s" % ("-"*80, time_generate(), wins, losses, draws))
print "\n\nWins: %d\nLosses: %d\nDraws: %d\n" % (wins, losses, draws)
if confirm("\n\nPlay again as another user?") == 1:
f.close()
f = open("BlackJack_log-%s_%s_%s_%s_%s_%s.txt" % ("%04d" % time.localtime()[0], "%02d" % time.localtime()[1], "%02d" % time.localtime()[2], "%02d" % time.localtime()[3], "%02d" % time.localtime()[4], "%02d" % time.localtime()[5]), "w")
continue
else:
wait("\n\nExiting...")
return
if __name__ == "__main__":
intro()
f = open("BlackJack_log-%s_%s_%s_%s_%s_%s.txt" % ("%04d" % time.localtime()[0], "%02d" % time.localtime()[1], "%02d" % time.localtime()[2], "%02d" % time.localtime()[3], "%02d" % time.localtime()[4], "%02d" % time.localtime()[5]), "w")
main()Edit: Small fix for a problem when the player got BlackJack... Last edited by UnKnown X; Feb 19th, 2006 at 4:58 AM. |
|
|
|
|
|
#2 |
|
Hobbyist Programmer
|
Oof, forgot about a break in there that made the game exit when you get BlackJack... Problem solved: # # # # # # # # # # # # # # # #
# BlackJack game by UnKnown X #
# # # # # # # # # # # # # # # #
import random, time
player_mode, dealer_mode = "normal", "normal"
player_cards, dealer_cards = [], []
deck = []
def confirm(message):
"""Confirm message
Display a message, get yes/no answer from Player.
Return 1 for yes, 0 for no."""
print str(message) + "\n"
while True:
try:
answer = raw_input("> ")
except ValueError:
print "ValueError exception encountered! Try again."
continue
if answer.lower() != "yes" and answer.lower() != "y" and answer.lower() != "no" and answer.lower() != "n":
print "Invalid answer! Try again."
continue
break
if answer.lower() == "yes" or answer.lower() == "y":
answer = 1
else:
answer = 0
return answer
def deal_cards(player_dealer, show_hide):
"""Deal cards
Call with two strings.
First is "player" or "dealer" for dealing cards to the Player or Dealer respectively.
Second is "show" or "hide" to have the card's information visible or not.
Function takes a random card and removes it from the deck,
adding it to the Player's or Dealer's hand in a list in the format TCS,
where T is a one-letter representation of the card type, C of the card
and S for whether or not to show the card ("S" or "H")."""
while True:
if deck[0] == [] and deck[1] == [] and deck[2] == [] and deck[3] == []:
return None
card_type_num = random.randrange(4)
card_num = random.randrange(len(deck[card_type_num]))
card_type = ['Spades', 'Hearts', 'Diamonds', 'Clubs'][card_type_num]
card = ['2','3','4','5','6','7','8','9','10','Jack','Queen','King','Ace'][card_num]
try:
deck[card_type_num].remove(card)
except ValueError:
continue
card_identifier = str(['Spades', 'Hearts', 'Diamonds', 'Clubs'][card_type_num])[0]
card_identifier += str(['2','3','4','5','6','7','8','9','10','Jack','Queen','King','Ace'][card_num])[0]
card_identifier += show_hide[0]
if player_dealer == "player":
global player_cards
player_cards.append(card_identifier)
elif player_dealer == "dealer":
global dealer_cards
dealer_cards.append(card_identifier)
return [card_type, card, show_hide]
def get_string(message):
"""Get string from Player
Print message to Player, ask for and return input."""
print str(message) + "\n"
while True:
try:
the_string = raw_input("> ")
except ValueError:
print "ValueError exception encountered! Try again."
continue
if the_string == "":
print "Error! Empty string! Try again."
continue
break
return the_string
def get_wager(message, money):
"""Get wager from Player
Get and return floating point number from Player."""
print message + "\n"
while True:
try:
wager_try = raw_input("> ")
wager = float(wager_try)
except ValueError:
print "'%s' is not a number! Try again." % wager_try
continue
if wager < 0.01 or wager > float(money):
print "Error! Cannot have %.2f as wager! Try again." % wager
continue
break
return float("%.2f" % wager)
def intro():
"""Intro
Print an intro."""
print "* "*30 + "*"
print "* BlackJack game by UnKnown X (demiblob@gmail.com) (C) 2006 *"
print "* "*30 + "*\n\n"
return
def move_choose_dealer():
"""Choose Dealer's move
"Hit" or "Stand", depending on Dealer's score."""
if score_dealer() < 17:
return "Hit"
else:
return "Stand"
def move_choose_player(start_round):
"""Choose Player's move
Show available moves for Player, return input when valid."""
while True:
if start_round == True:
print "Available moves: Hit, Stand, Double"
else:
print "Available moves: Hit, Stand"
player_move = get_string("Choose your move.").capitalize()
if start_round == True:
if player_move != "S" and player_move != "Stand" and player_move != "H" and player_move != "Hit" and player_move != "D" and player_move != "Double":
print "Error: Invalid move '%s'! Try again." % player_move
continue
else:
if player_move != "S" and player_move != "Stand" and player_move != "H" and player_move != "Hit":
print "Error: Invalid move '%s'! Try again." % player_move
continue
if player_move == "S" or player_move == "Stand":
return "Stand"
elif player_move == "H" or player_move == "Hit":
return "Hit"
elif player_move == "D" or player_move == "Double":
return "Double"
else:
print "Error: '%s' is not a valid move! Try again." % player_move
continue
def print_cards(player_name, hide):
"""Print cards
Print all the cards. See function 'deal_cards' for more info about the cards."""
print "\n\nDealer's Hand\n"
dealer_print = ""
for item in dealer_cards:
card_type = item[0]
card = item[1]
show_hide = item[2]
if show_hide == "h" and hide == True:
dealer_print += "*hidden* "
else:
if card == "2":
dealer_print += "2"
elif card == "3":
dealer_print += "3"
elif card == "4":
dealer_print += "4"
elif card == "5":
dealer_print += "5"
elif card == "6":
dealer_print += "6"
elif card == "7":
dealer_print += "7"
elif card == "8":
dealer_print += "8"
elif card == "9":
dealer_print += "9"
elif card == "1":
dealer_print += "10"
elif card == "J":
dealer_print += "Jack"
elif card == "Q":
dealer_print += "Queen"
elif card == "K":
dealer_print += "King"
elif card == "A":
dealer_print += "Ace"
dealer_print += " of "
if card_type == "S":
dealer_print += "Spades"
elif card_type == "H":
dealer_print += "Hearts"
elif card_type == "D":
dealer_print += "Diamonds"
elif card_type == "C":
dealer_print += "Clubs"
dealer_print += " "
print dealer_print
if show_hide == "h" and hide == True:
print "Score: Hidden"
else:
print "Score:", score_dealer()
if player_name[len(player_name)-1].lower() == "s" or player_name[len(player_name)-1].lower() == "x":
apostrophe = "'"
else:
apostrophe = "'s"
print "\n\n%s%s Hand\n" % (player_name, apostrophe)
player_print = ""
for item in player_cards:
card_type = item[0]
card = item[1]
if card == "2":
player_print += "2"
elif card == "3":
player_print += "3"
elif card == "4":
player_print += "4"
elif card == "5":
player_print += "5"
elif card == "6":
player_print += "6"
elif card == "7":
player_print += "7"
elif card == "8":
player_print += "8"
elif card == "9":
player_print += "9"
elif card == "1":
player_print += "10"
elif card == "J":
player_print += "Jack"
elif card == "Q":
player_print += "Queen"
elif card == "K":
player_print += "King"
elif card == "A":
player_print += "Ace"
player_print += " of "
if card_type == "S":
player_print += "Spades"
elif card_type == "H":
player_print += "Hearts"
elif card_type == "D":
player_print += "Diamonds"
elif card_type == "C":
player_print += "Clubs"
player_print += " "
print player_print
print "Score:", score_player()
print "\n\n"
return
def restock_deck():
"""Restock deck
Re-initialize the deck, which is a list containing four lists of thirteen strings."""
spades = ['2','3','4','5','6','7','8','9','10','Jack','Queen','King','Ace']
hearts = ['2','3','4','5','6','7','8','9','10','Jack','Queen','King','Ace']
diamonds = ['2','3','4','5','6','7','8','9','10','Jack','Queen','King','Ace']
clubs = ['2','3','4','5','6','7','8','9','10','Jack','Queen','King','Ace']
global deck
deck = [spades,hearts,diamonds,clubs]
return deck
def score_dealer():
"""Dealer's score
Get and return Dealer's score."""
global dealer_cards
score = 0
for item in dealer_cards:
if item[1] == "2":
score += 2
elif item[1] == "3":
score += 3
elif item[1] == "4":
score += 4
elif item[1] == "5":
score += 5
elif item[1] == "6":
score += 6
elif item[1] == "7":
score += 7
elif item[1] == "8":
score += 8
elif item[1] == "9":
score += 9
elif item[1] == "1":
score += 10
elif item[1] == "J":
score += 2
elif item[1] == "Q":
score += 3
elif item[1] == "K":
score += 4
elif item[1] == "A":
if score + 11 > 21:
score += 1
else:
score += 11
return score
def score_player():
"""Player's score
Get and return Player's score."""
global player_cards
score = 0
for item in player_cards:
if item[1] == "2":
score += 2
elif item[1] == "3":
score += 3
elif item[1] == "4":
score += 4
elif item[1] == "5":
score += 5
elif item[1] == "6":
score += 6
elif item[1] == "7":
score += 7
elif item[1] == "8":
score += 8
elif item[1] == "9":
score += 9
elif item[1] == "1":
score += 10
elif item[1] == "J":
score += 2
elif item[1] == "Q":
score += 3
elif item[1] == "K":
score += 4
elif item[1] == "A":
if score + 11 > 21:
score += 1
else:
score += 11
return score
def time_generate():
"""Generate time
in the format: Day DDth Month, YYYY at HH:MM:SS."""
timedate = ""
timedate += time.strftime("%a ", time.localtime())
timedate += str(time.localtime()[2])
if time.localtime()[2] % 10 == 1 and time.localtime()[2] % 100 != 11:
timedate += "st"
elif time.localtime()[2] % 10 == 2 and time.localtime()[2] % 100 != 12:
timedate += "nd"
elif time.localtime()[2] % 10 == 3 and time.localtime()[2] % 100 != 13:
timedate += "rd"
else:
timedate += "th"
timedate += " "
if time.localtime()[1] == 1:
timedate += "January"
elif time.localtime()[1] == 2:
timedate += "February"
elif time.localtime()[1] == 3:
timedate += "March"
elif time.localtime()[1] == 4:
timedate += "April"
elif time.localtime()[1] == 5:
timedate += "May"
elif time.localtime()[1] == 6:
timedate += "June"
elif time.localtime()[1] == 7:
timedate += "July"
elif time.localtime()[1] == 8:
timedate += "August"
elif time.localtime()[1] == 9:
timedate += "September"
elif time.localtime()[1] == 10:
timedate += "October"
elif time.localtime()[1] == 11:
timedate += "November"
elif time.localtime()[1] == 12:
timedate += "December"
else:
timedate += "Unknown month"
timedate += ", " + str(time.localtime()[0])
timedate += " at %02d" % time.localtime()[3]
timedate += ":%02d" % time.localtime()[4]
timedate += ":%02d" % time.localtime()[5]
return timedate
def wait(message):
raw_input(message)
def write_cards(player_name, hide):
"""Write cards to file
Write all the cards to file.
See function 'deal_cards' for more info about the cards."""
f.write("\n\nDealer's Hand on %s\n" % time_generate())
dealer_print = "-- "
for item in dealer_cards:
card_type = item[0]
card = item[1]
show_hide = item[2]
if card == "2":
dealer_print += "2"
elif card == "3":
dealer_print += "3"
elif card == "4":
dealer_print += "4"
elif card == "5":
dealer_print += "5"
elif card == "6":
dealer_print += "6"
elif card == "7":
dealer_print += "7"
elif card == "8":
dealer_print += "8"
elif card == "9":
dealer_print += "9"
elif card == "1":
dealer_print += "10"
elif card == "J":
dealer_print += "Jack"
elif card == "Q":
dealer_print += "Queen"
elif card == "K":
dealer_print += "King"
elif card == "A":
dealer_print += "Ace"
dealer_print += " of "
if card_type == "S":
dealer_print += "Spades"
elif card_type == "H":
dealer_print += "Hearts"
elif card_type == "D":
dealer_print += "Diamonds"
elif card_type == "C":
dealer_print += "Clubs"
if show_hide == "h" and hide == True:
dealer_print += " (hidden)"
dealer_print += " "
f.write(dealer_print + "\n")
f.write("-- Score: %s\n\n" % score_dealer())
if player_name[len(player_name)-1].lower() == "s" or player_name[len(player_name)-1].lower() == "x":
apostrophe = "'"
else:
apostrophe = "'s"
f.write("%s%s Hand on %s\n" % (player_name, apostrophe, time_generate()))
player_print = "-- "
for item in player_cards:
card_type = item[0]
card = item[1]
if card == "2":
player_print += "2"
elif card == "3":
player_print += "3"
elif card == "4":
player_print += "4"
elif card == "5":
player_print += "5"
elif card == "6":
player_print += "6"
elif card == "7":
player_print += "7"
elif card == "8":
player_print += "8"
elif card == "9":
player_print += "9"
elif card == "1":
player_print += "10"
elif card == "J":
player_print += "Jack"
elif card == "Q":
player_print += "Queen"
elif card == "K":
player_print += "King"
elif card == "A":
player_print += "Ace"
player_print += " of "
if card_type == "S":
player_print += "Spades"
elif card_type == "H":
player_print += "Hearts"
elif card_type == "D":
player_print += "Diamonds"
elif card_type == "C":
player_print += "Clubs"
player_print += " "
f.write(player_print + "\n")
f.write("-- Score: %s\n" % score_player())
return
def main():
"""BlackJack
Play BlackJack."""
play = True
global deck, player_cards, dealer_cards, f, player_mode, dealer_mode
while play == True:
player_name = get_string("Please input your name.")
f.write("BlackJack log for " + player_name + " on " + str(time_generate()) + "\n\n\n\n")
wins, losses, draws, money = 0, 0, 0, 100.00
deck = []
play_player = True
while play_player == True:
player_mode, dealer_mode = "normal", "normal"
f.write("%s\n\n\nStarting round %s on %s with $%s. " % ("-"*80, wins + losses + draws + 1, time_generate(), "%.2f" % money))
print "\n\nStarting round %d on %s with $%.2f!" % (wins + losses + draws + 1, time_generate(), money), "\n"
wager = get_wager("Choose wager.", money)
f.write("Wager: $" + "%.2f" % wager + "\n")
deck = restock_deck()
player_cards, dealer_cards = [], []
deal_cards("player", "show")
deal_cards("dealer", "show")
deal_cards("player", "show")
deal_cards("dealer", "hide")
print_cards(player_name, True)
write_cards(player_name, True)
f.write("\n")
blackjack = False
if score_player() == 21 and score_dealer() != 21:
print_cards(player_name, False)
write_cards(player_name, False)
f.write("\n")
print "BlackJack!!"
wager *= 2
money += wager
print "\nPayout: $%.2f" % wager
f.write("\n%s got a BlackJack on %s!\n-- Payout: $%s\n-- Money: $%s\n\n" % (player_name, time_generate(), "%.2f" % wager, "%.2f" % money))
wins += 1
blackjack = True
elif score_player() == 21 and score_dealer() == 21:
print_cards(player_name, False)
write_cards(player_name, False)
f.write("\n")
print "Draw!"
f.write("\nThere was a draw on %s.\n-- Money: $%s\n\n" % (time_generate(), "%.2f" % money))
draws += 1
blackjack = True
start_round = True
while blackjack != True:
if player_mode == "normal":
player_move = move_choose_player(start_round)
f.write("\n** %s %ss on %s.\n" % (player_name, player_move, time_generate()))
if player_move == "Hit":
deal_cards("player", "show")
elif player_move == "Stand":
player_mode = "stand"
elif player_move == "Double":
deal_cards("player", "show")
player_mode = "double"
wager *= 2
else:
f.write("\n** %s is standing on %s.\n" % (player_name, time_generate()))
if dealer_mode == "normal":
dealer_move = move_choose_dealer()
f.write("** Dealer %ss on %s.\n" % (dealer_move, time_generate()))
print "\nDealer %ss." % dealer_move
if dealer_move == "Hit":
deal_cards("dealer", "hide")
elif dealer_move == "Stand":
dealer_mode = "stand"
else:
f.write("** Dealer is standing on %s.\n" % (time_generate()))
print "\nDealer is standing."
if score_player() > 21:
print_cards(player_name, False)
write_cards(player_name, False)
f.write("\n")
print "Busted!"
money -= wager
print "\nMoney lost: $%.2f" % wager
f.write("\n%s lost on %s.\n-- Money lost: $%s\n-- Money: $%s\n\n" % (player_name, time_generate(), "%.2f" % wager, "%.2f" % money))
losses += 1
break
elif score_dealer() > 21:
print_cards(player_name, False)
write_cards(player_name, False)
f.write("\n")
print "You win!"
money += wager
print "\nPayout: $%.2f" % wager
f.write("\n%s got a BlackJack on %s!\n-- Payout: $%s\n-- Money: $%s\n\n" % (player_name, time_generate(), "%.2f" % wager, "%.2f" % money))
wins += 1
break
elif score_player() == score_dealer() and dealer_mode == "stand" and (player_mode == "stand" or player_mode == "double"):
print_cards(player_name, False)
write_cards(player_name, False)
f.write("\n")
print "Draw!"
f.write("\nThere was a draw on %s.\n-- Money: $%s\n\n" % (time_generate(), "%.2f" % money))
draws += 1
break
elif score_player() > score_dealer() and dealer_mode == "stand" and (player_mode == "stand" or player_mode == "double"):
print_cards(player_name, False)
write_cards(player_name, False)
f.write("\n")
print "You win!"
money += wager
print "\nPayout: $%.2f" % wager
f.write("\n%s got a BlackJack on %s!\n-- Payout: $%s\n-- Money: $%s\n\n" % (player_name, time_generate(), "%.2f" % wager, "%.2f" % money))
wins += 1
break
elif score_player() < score_dealer() and dealer_mode == "stand" and (player_mode == "stand" or player_mode == "double"):
print_cards(player_name, False)
write_cards(player_name, False)
f.write("\n")
print "You lose!"
money -= wager
print "\nMoney lost: $%.2f" % wager
f.write("\n%s lost on %s.\n-- Money lost: $%s\n-- Money: $%s\n\n" % (player_name, time_generate(), "%.2f" % wager, "%.2f" % money))
losses += 1
break
print_cards(player_name, True)
write_cards(player_name, True)
f.write("\n")
start_round = False
print "\nMoney: $%.2f" % money
if money < 0.01:
print "\nSorry, you don't have enough cash to play!\n"
f.write("\n")
break
play_player = confirm("\n\nPlay again?")
f.write("\n")
f.write("%s\n\n\nEnded game on %s.\n-- Wins: %s\n-- Losses: %s\n-- Draws: %s" % ("-"*80, time_generate(), wins, losses, draws))
print "\n\nWins: %d\nLosses: %d\nDraws: %d\n" % (wins, losses, draws)
if confirm("\n\nPlay again as another user?") == 1:
f.close()
f = open("BlackJack_log-%s_%s_%s_%s_%s_%s.txt" % ("%04d" % time.localtime()[0], "%02d" % time.localtime()[1], "%02d" % time.localtime()[2], "%02d" % time.localtime()[3], "%02d" % time.localtime()[4], "%02d" % time.localtime()[5]), "w")
continue
else:
wait("\n\nExiting...")
return
if __name__ == "__main__":
intro()
f = open("BlackJack_log-%s_%s_%s_%s_%s_%s.txt" % ("%04d" % time.localtime()[0], "%02d" % time.localtime()[1], "%02d" % time.localtime()[2], "%02d" % time.localtime()[3], "%02d" % time.localtime()[4], "%02d" % time.localtime()[5]), "w")
main() |