Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random
- def main():
- #Initialize variables
- play_again_counter = 0
- winnings = 0
- bet = 25
- money = 1000
- name = ""
- restore_list = []
- #Get name and money from restore() function
- restore_list = restore()
- name = restore_list[0]
- money = restore_list[1]
- #Run if a blackjack.save file exists
- if name != "" and money != -1:
- #Ask user if they want to resume saved game
- resume = input("Resume saved game '" + name + "'? (y/n) ")
- #Check if user resumes saved game
- if resume == 'y':
- #Print out values from saved game
- print(name + " has $" + str(money))
- print()
- #Run game and loop if the user wants to keep playing
- while play_again_counter == 0:
- bet = input_bet(bet, money)
- if bet == 0:
- print("Player has quit")
- save(name, money)
- exit()
- else:
- play_again_counter = 0
- winnings = play_hand(name, bet)
- money += winnings
- print()
- print(name + " has $" + str(money))
- print()
- #Make new game if the user does not want to resume saved game
- else:
- #Get user's name and print out starting value
- name = input("Name? ")
- money = 1000
- print(name + " has $1,000")
- print()
- #Run game and loop if the user wants to keep playing
- while play_again_counter == 0:
- bet = input_bet(bet, money)
- if bet == 0:
- print("Player has quit")
- save(name, money)
- exit()
- else:
- play_again_counter = 0
- winnings = play_hand(name, bet)
- money += winnings
- print()
- print(name + " has $" + str(money))
- print()
- #Run if there is no blackjack.save file from a previous game
- else:
- #Get user's name and print out starting value
- name = input("Name? ")
- money = 1000
- print(name + " has $1,000")
- print()
- #Run game and loop if the user wants to keep playing
- while play_again_counter == 0:
- bet = input_bet(bet, money)
- if bet == 0:
- print("Player has quit")
- save(name, money)
- exit()
- else:
- play_again_counter = 0
- winnings = play_hand(name, bet)
- money += winnings
- print()
- print(name + " has $" + str(money))
- print()
- def string_of_hand(hand):
- def new_deck():
- #Initialize variables
- deck = []
- card = ()
- #Create 13 cards in spades
- for i in range(1, 14):
- card = (i, '\u2660')
- deck.append(card)
- #Create 13 cards in hearts
- for i in range(1, 14):
- card = (i, '\u2661')
- deck.append(card)
- #Create 13 cards in diamonds
- for i in range(1, 14):
- card = (i, '\u2662')
- deck.append(card)
- #Create 13 cards in clubs
- for i in range(1, 14):
- card = (i, '\u2663')
- deck.append(card)
- return deck
- def shuffle_deck(deck):
- #Shuffle deck
- random.shuffle(deck)
- def value_of_card(card):
- if card[0] >= 2 and card[0] <= 10:
- card_value = card[0]
- elif card[0] == 1:
- card_value = 11
- else:
- card_value = 10
- return card_value
- def string_of_card(card):
- if card[0] >= 2 and card[0] <= 10:
- card_string = str(card[0]) + card[1]
- elif card[0] == 1:
- card_string = 'A' + card[1]
- elif card[0] == 11:
- card_string = 'J' + card[1]
- elif card[0] == 12:
- card_string = 'Q' + card[1]
- elif card[0] == 13:
- card_string = 'K' + card[1]
- return card_string
- def save(name, money):
- #Open function for writing blackjack.save
- save_info = open('blackjack.save', 'w')
- #Write name and money into the file
- save_info.write(str(name) + '\n')
- save_info.write(str(money) + '\n')
- #Close function for writing blackjack.save
- save_info.close()
- def restore():
- #Initialize variable
- restore_list = []
- #Check if blackjack.save exists
- try:
- #Open file for reading blackjack.save
- read_info = open('blackjack.save', 'r')
- #Read the lines of text
- name_in_file = read_info.readline()
- money_in_file = read_info.readline()
- #Strip \n from the text lines
- name = name_in_file.rstrip('\n')
- money = int(money_in_file.rstrip('\n'))
- #Close function for reading blackjack.save
- read_info.close()
- except FileNotFoundError:
- name = ""
- money = -1
- #Add name and money to restore_list so they can be returned
- restore_list.append(name)
- restore_list.append(money)
- return restore_list
- def input_bet(bet, money):
- while True:
- #Ask for bet
- bet_check = input("Bet? (0 to quit, Enter to stay at $" + str(bet) + ") ")
- #Check if player hit Enter
- if bet_check == "":
- #Check whether or not player has enough money in account to continue
- #with the same bet
- if bet < money:
- break
- elif bet > money:
- print("You cannot bet more than $" + str(money))
- else:
- #Check if input was integer
- try:
- bet_check = int(bet_check)
- #Check if they want to quit
- if bet_check == 0:
- return 0
- #Check that bet check is not negative
- elif bet_check < 0:
- print("You cannot bet a negative amount")
- #Check that bet is less than amount in account
- else:
- if bet_check > money:
- print("You cannot bet more than $" + str(money))
- else:
- bet = bet_check
- break
- #If input was not an integer
- except ValueError:
- #Output error if input was a float
- try:
- bet_check = float(bet_check)
- print("You must bet a whole number")
- #Output error if input was not a number
- except ValueError:
- print("You must type a number")
- return bet
- def play_hand(name, bet):
- deck = new_deck()
- shuffle_deck(deck)
- #Deal intial cards for dealer and player
- card_1 = deck.pop()
- print("Dealer received " + str(string_of_card(card_1)))
- card_2 = deck.pop()
- print(name + " received " + str(string_of_card(card_2)))
- card_3 = deck.pop()
- print(name + " received " + str(string_of_card(card_3)))
- #Calculate totals for dealer and player
- dealer_total = value_of_card(card_1)
- print("Dealer total: " + str(dealer_total))
- player_total = value_of_card(card_2) + value_of_card(card_3)
- print(name + " total: " + str(player_total))
- #Initialize counter variables
- dealer_counter = 0
- player_counter = 0
- #Check if player total is 21
- if player_total == 21:
- #Continue picking cards for dealer if player gets 21
- while dealer_counter == 0:
- dealer_card = deck.pop()
- dealer_total += value_of_card(dealer_card)
- print("Dealer received " + str(string_of_card(dealer_card)))
- print("Dealer total: " + str(dealer_total))
- print(name + " total: " + str(player_total))
- print()
- if dealer_total >= 17:
- dealer_counter = 1
- #Output results for dealer ending less than 21
- if dealer_total < 21:
- print(name + " wins")
- winnings = bet
- return winnings
- #Output results for dealer tie with player
- elif dealer_total == 21:
- print("Push")
- winnings = 0
- return winnings
- #Output results for dealer bust
- else:
- print("Dealer bust")
- winnings = bet
- return winnings
- #Check if player total is less than 21
- elif player_total < 21:
- #Ask player what move they want to make
- while player_counter == 0:
- move = input("Move? (h/s) ")
- print()
- #Continue dealing cards to player and outputting results for hit
- if move == 'h':
- player_card = deck.pop()
- player_total += value_of_card(player_card)
- print(name + " received " + str(string_of_card(player_card)))
- print("Dealer total: " + str(dealer_total))
- print(name + " total: " + str(player_total))
- print()
- if player_total >= 21:
- player_counter = 1
- #Stop dealing cards to player for stay
- elif move == 's':
- player_counter = 1
- #Check if player does not bust
- if player_total <= 21:
- #Continue picking cards for dealer if player stays
- while dealer_counter == 0:
- dealer_card = deck.pop()
- dealer_total += value_of_card(dealer_card)
- print("Dealer received " + str(string_of_card(dealer_card)))
- print("Dealer total: " + str(dealer_total))
- print(name + " total: " + str(player_total))
- print()
- #Pick cards for dealer while his total is less than 17
- if dealer_total >= 17:
- dealer_counter = 1
- #Check if dealer ends less than 21
- if dealer_total < 21:
- #Compare dealer total to player total and determine winner
- if dealer_total < player_total:
- print(name + " wins")
- winnings = bet
- return winnings
- elif dealer_total > player_total:
- print("Dealer wins")
- winnings = -bet
- return winnings
- else:
- print("Push")
- winnings = 0
- return winnings
- #Check if dealer ends at 21
- elif dealer_total == 21:
- #Compare dealer total to player total and determine winner
- if dealer_total == player_total:
- print("Push")
- winnings = 0
- return winnings
- else:
- print("Dealer wins")
- winnings = -bet
- return winnings
- #Check if dealer busts
- else:
- print("Dealer bust")
- winnings = bet
- return winnings
- #Check if player busts after move
- elif player_total > 21:
- print(name + " bust")
- winnings = -bet
- return winnings
- #Check if player busts after initial pick
- else:
- print(name + " bust")
- winnings = -bet
- return winnings
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement