Advertisement
oanap123

Activity5

Jul 12th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 11.34 KB | None | 0 0
  1. import random
  2.  
  3. def main():
  4.     #Initialize variables
  5.     play_again_counter = 0
  6.     winnings = 0
  7.     bet = 25
  8.     money = 1000
  9.     name = ""
  10.     restore_list = []
  11.  
  12.     #Get name and money from restore() function
  13.     restore_list = restore()
  14.     name = restore_list[0]
  15.     money = restore_list[1]
  16.  
  17.     #Run if a blackjack.save file exists
  18.     if name != "" and money != -1:
  19.         #Ask user if they want to resume saved game
  20.         resume = input("Resume saved game '" + name + "'? (y/n) ")
  21.         #Check if user resumes saved game
  22.         if resume == 'y':
  23.             #Print out values from saved game
  24.             print(name + " has $" + str(money))
  25.             print()
  26.  
  27.             #Run game and loop if the user wants to keep playing
  28.             while play_again_counter == 0:
  29.                 bet = input_bet(bet, money)
  30.                 if bet == 0:
  31.                     print("Player has quit")
  32.                     save(name, money)
  33.                     exit()
  34.                 else:
  35.                     play_again_counter = 0
  36.                 winnings = play_hand(name, bet)
  37.                 money += winnings
  38.                 print()
  39.                 print(name + " has $" + str(money))
  40.                 print()
  41.         #Make new game if the user does not want to resume saved game
  42.         else:
  43.             #Get user's name and print out starting value
  44.             name = input("Name? ")
  45.             money = 1000
  46.             print(name + " has $1,000")
  47.             print()
  48.  
  49.             #Run game and loop if the user wants to keep playing
  50.             while play_again_counter == 0:
  51.                 bet = input_bet(bet, money)
  52.                 if bet == 0:
  53.                     print("Player has quit")
  54.                     save(name, money)
  55.                     exit()
  56.                 else:
  57.                     play_again_counter = 0
  58.                 winnings = play_hand(name, bet)
  59.                 money += winnings
  60.                 print()
  61.                 print(name + " has $" + str(money))
  62.                 print()
  63.     #Run if there is no blackjack.save file from a previous game
  64.     else:
  65.         #Get user's name and print out starting value
  66.         name = input("Name? ")
  67.         money = 1000
  68.         print(name + " has $1,000")
  69.         print()
  70.  
  71.         #Run game and loop if the user wants to keep playing
  72.         while play_again_counter == 0:
  73.             bet = input_bet(bet, money)
  74.             if bet == 0:
  75.                 print("Player has quit")
  76.                 save(name, money)
  77.                 exit()
  78.             else:
  79.                 play_again_counter = 0
  80.             winnings = play_hand(name, bet)
  81.             money += winnings
  82.             print()
  83.             print(name + " has $" + str(money))
  84.             print()
  85.  
  86.  
  87. def string_of_hand(hand):
  88.  
  89.  
  90.  
  91. def new_deck():
  92.     #Initialize variables
  93.     deck = []
  94.     card = ()
  95.  
  96.     #Create 13 cards in spades
  97.     for i in range(1, 14):
  98.         card = (i, '\u2660')
  99.         deck.append(card)
  100.     #Create 13 cards in hearts
  101.     for i in range(1, 14):
  102.         card = (i, '\u2661')
  103.         deck.append(card)
  104.     #Create 13 cards in diamonds
  105.     for i in range(1, 14):
  106.         card = (i, '\u2662')
  107.         deck.append(card)
  108.     #Create 13 cards in clubs
  109.     for i in range(1, 14):
  110.         card = (i, '\u2663')
  111.         deck.append(card)
  112.  
  113.     return deck
  114.  
  115.  
  116. def shuffle_deck(deck):
  117.     #Shuffle deck
  118.     random.shuffle(deck)
  119.  
  120.  
  121. def value_of_card(card):
  122.     if card[0] >= 2 and card[0] <= 10:
  123.         card_value = card[0]
  124.     elif card[0] == 1:
  125.         card_value = 11
  126.     else:
  127.         card_value = 10
  128.  
  129.     return card_value
  130.  
  131.  
  132. def string_of_card(card):
  133.     if card[0] >= 2 and card[0] <= 10:
  134.         card_string = str(card[0]) + card[1]
  135.     elif card[0] == 1:
  136.         card_string = 'A' + card[1]
  137.     elif card[0] == 11:
  138.         card_string = 'J' + card[1]
  139.     elif card[0] == 12:
  140.         card_string = 'Q' + card[1]
  141.     elif card[0] == 13:
  142.         card_string = 'K' + card[1]
  143.  
  144.     return card_string
  145.  
  146.  
  147. def save(name, money):
  148.     #Open function for writing blackjack.save
  149.     save_info = open('blackjack.save', 'w')
  150.  
  151.     #Write name and money into the file
  152.     save_info.write(str(name) + '\n')
  153.     save_info.write(str(money) + '\n')
  154.  
  155.     #Close function for writing blackjack.save
  156.     save_info.close()
  157.  
  158.  
  159. def restore():
  160.     #Initialize variable
  161.     restore_list = []
  162.  
  163.     #Check if blackjack.save exists
  164.     try:
  165.         #Open file for reading blackjack.save
  166.         read_info = open('blackjack.save', 'r')
  167.  
  168.         #Read the lines of text
  169.         name_in_file = read_info.readline()
  170.         money_in_file = read_info.readline()
  171.  
  172.         #Strip \n from the text lines
  173.         name = name_in_file.rstrip('\n')
  174.         money = int(money_in_file.rstrip('\n'))
  175.  
  176.         #Close function for reading blackjack.save
  177.         read_info.close()
  178.  
  179.     except FileNotFoundError:
  180.         name = ""
  181.         money = -1
  182.  
  183.     #Add name and money to restore_list so they can be returned
  184.     restore_list.append(name)
  185.     restore_list.append(money)
  186.  
  187.     return restore_list
  188.  
  189.  
  190. def input_bet(bet, money):
  191.     while True:
  192.         #Ask for bet
  193.         bet_check = input("Bet? (0 to quit, Enter to stay at $" + str(bet) + ") ")
  194.  
  195.         #Check if player hit Enter
  196.         if bet_check == "":
  197.             #Check whether or not player has enough money in account to continue
  198.             #with the same bet
  199.             if bet < money:
  200.                 break
  201.             elif bet > money:
  202.                 print("You cannot bet more than $" + str(money))
  203.  
  204.         else:
  205.             #Check if input was integer
  206.             try:
  207.                 bet_check = int(bet_check)
  208.                 #Check if they want to quit
  209.                 if bet_check == 0:
  210.                     return 0
  211.                 #Check that bet check is not negative
  212.                 elif bet_check < 0:
  213.                     print("You cannot bet a negative amount")
  214.                 #Check that bet is less than amount in account
  215.                 else:
  216.                     if bet_check > money:
  217.                         print("You cannot bet more than $" + str(money))
  218.                     else:
  219.                         bet = bet_check
  220.                         break
  221.             #If input was not an integer
  222.             except ValueError:
  223.                 #Output error if input was a float
  224.                 try:
  225.                     bet_check = float(bet_check)
  226.                     print("You must bet a whole number")
  227.                 #Output error if input was not a number
  228.                 except ValueError:
  229.                     print("You must type a number")
  230.  
  231.     return bet
  232.  
  233.  
  234. def play_hand(name, bet):
  235.  
  236.     deck = new_deck()
  237.     shuffle_deck(deck)
  238.  
  239.     #Deal intial cards for dealer and player
  240.     card_1 = deck.pop()
  241.     print("Dealer received " + str(string_of_card(card_1)))
  242.     card_2 = deck.pop()
  243.     print(name + " received " + str(string_of_card(card_2)))
  244.     card_3 = deck.pop()
  245.     print(name + " received " + str(string_of_card(card_3)))
  246.  
  247.     #Calculate totals for dealer and player
  248.     dealer_total = value_of_card(card_1)
  249.     print("Dealer total: " + str(dealer_total))
  250.     player_total = value_of_card(card_2) + value_of_card(card_3)
  251.     print(name + " total: " + str(player_total))
  252.  
  253.     #Initialize counter variables
  254.     dealer_counter = 0
  255.     player_counter = 0
  256.  
  257.     #Check if player total is 21
  258.     if player_total == 21:
  259.         #Continue picking cards for dealer if player gets 21
  260.         while dealer_counter == 0:
  261.             dealer_card = deck.pop()
  262.             dealer_total += value_of_card(dealer_card)
  263.             print("Dealer received " + str(string_of_card(dealer_card)))
  264.             print("Dealer total: " + str(dealer_total))
  265.             print(name + " total: " + str(player_total))
  266.             print()
  267.             if dealer_total >= 17:
  268.                 dealer_counter = 1
  269.         #Output results for dealer ending less than 21
  270.         if dealer_total < 21:
  271.             print(name + " wins")
  272.             winnings = bet
  273.             return winnings
  274.         #Output results for dealer tie with player
  275.         elif dealer_total == 21:
  276.             print("Push")
  277.             winnings = 0
  278.             return winnings
  279.         #Output results for dealer bust
  280.         else:
  281.             print("Dealer bust")
  282.             winnings = bet
  283.             return winnings
  284.  
  285.     #Check if player total is less than 21
  286.     elif player_total < 21:
  287.         #Ask player what move they want to make
  288.         while player_counter == 0:
  289.             move = input("Move? (h/s) ")
  290.             print()
  291.             #Continue dealing cards to player and outputting results for hit
  292.             if move == 'h':
  293.                 player_card = deck.pop()
  294.                 player_total += value_of_card(player_card)
  295.                 print(name + " received " + str(string_of_card(player_card)))
  296.                 print("Dealer total: " + str(dealer_total))
  297.                 print(name + " total: " + str(player_total))
  298.                 print()
  299.                 if player_total >= 21:
  300.                     player_counter = 1
  301.             #Stop dealing cards to player for stay
  302.             elif move == 's':
  303.                 player_counter = 1
  304.  
  305.         #Check if player does not bust
  306.         if player_total <= 21:
  307.             #Continue picking cards for dealer if player stays
  308.             while dealer_counter == 0:
  309.                 dealer_card = deck.pop()
  310.                 dealer_total += value_of_card(dealer_card)
  311.                 print("Dealer received " + str(string_of_card(dealer_card)))
  312.                 print("Dealer total: " + str(dealer_total))
  313.                 print(name + " total: " + str(player_total))
  314.                 print()
  315.  
  316.                 #Pick cards for dealer while his total is less than 17
  317.                 if dealer_total >= 17:
  318.                     dealer_counter = 1
  319.  
  320.             #Check if dealer ends less than 21
  321.             if dealer_total < 21:
  322.                 #Compare dealer total to player total and determine winner
  323.                 if dealer_total < player_total:
  324.                     print(name + " wins")
  325.                     winnings = bet
  326.                     return winnings
  327.                 elif dealer_total > player_total:
  328.                     print("Dealer wins")
  329.                     winnings = -bet
  330.                     return winnings
  331.                 else:
  332.                     print("Push")
  333.                     winnings = 0
  334.                     return winnings
  335.             #Check if dealer ends at 21
  336.             elif dealer_total == 21:
  337.                 #Compare dealer total to player total and determine winner
  338.                 if dealer_total == player_total:
  339.                     print("Push")
  340.                     winnings = 0
  341.                     return winnings
  342.                 else:
  343.                     print("Dealer wins")
  344.                     winnings = -bet
  345.                     return winnings
  346.             #Check if dealer busts
  347.             else:
  348.                 print("Dealer bust")
  349.                 winnings = bet
  350.                 return winnings
  351.  
  352.         #Check if player busts after move
  353.         elif player_total > 21:
  354.             print(name + " bust")
  355.             winnings = -bet
  356.             return winnings
  357.  
  358.     #Check if player busts after initial pick
  359.     else:
  360.         print(name + " bust")
  361.         winnings = -bet
  362.         return winnings
  363.  
  364. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement