SMASIF

BlackJack Udemy (V4.0) Needs Minor Fixing

Oct 6th, 2023
432
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.74 KB | None | 0 0
  1. ############### Blackjack Project #####################
  2.  
  3. #Difficulty Normal 😎: Use all Hints below to complete the project.
  4. #Difficulty Hard 🤔: Use only Hints 1, 2, 3 to complete the project.
  5. #Difficulty Extra Hard 😭: Only use Hints 1 & 2 to complete the project.
  6. #Difficulty Expert 🤯: Only use Hint 1 to complete the project.
  7.  
  8. ############### Our Blackjack House Rules #####################
  9.  
  10. ## The deck is unlimited in size.
  11. ## There are no jokers.
  12. ## The Jack/Queen/King all count as 10.
  13. ## The the Ace can count as 11 or 1.
  14. ## Use the following list as the deck of cards:
  15. ## cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
  16. ## The cards in the list have equal probability of being drawn.
  17. ## Cards are not removed from the deck as they are drawn.
  18. ## The computer is the dealer.
  19.  
  20. ##################### Hints #####################
  21.  
  22. #Hint 1: Go to this website and try out the Blackjack game:
  23. #   https://games.washingtonpost.com/games/blackjack/
  24. #Then try out the completed Blackjack project here:
  25. #   http://blackjack-final.appbrewery.repl.run
  26.  
  27. #Hint 2: Read this breakdown of program requirements:
  28. #   http://listmoz.com/view/6h34DJpvJBFVRlZfJvxF
  29. #Then try to create your own flowchart for the program.
  30.  
  31. #Hint 3: Download and read this flow chart I've created:
  32. #   https://drive.google.com/uc?export=download&id=1rDkiHCrhaf9eX7u7yjM1qwSuyEk-rPnt
  33.  
  34. #Hint 4: Create a deal_card() function that uses the List below to *return* a random card.
  35. #11 is the Ace.
  36. import random
  37. import art
  38. import os
  39. cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
  40. user_cards = []
  41. computer_cards = []
  42. def clear():
  43.     os.system('cls' if os.name=='nt' else 'clear')
  44.  
  45. def startgame():
  46.     opinion = input("Do you want to play a game of Black Jack? Type y or n: ")
  47.     if(opinion.lower() == 'y'):
  48.         user_cards.clear()
  49.         computer_cards.clear()
  50.         main()
  51.     else:
  52.         return
  53.  
  54. def deal_card_user():
  55.     user_cards.append(random.choice(cards))
  56.  
  57. def deal_card_computer():
  58.      computer_cards.append(random.choice(cards))
  59.    
  60.     # print(user_cards)
  61.  
  62.  
  63. def calculate_score(cardlist):
  64.     result = 0
  65.     result += sum(cardlist)
  66.     if result == 21:
  67.         return 0
  68.     elif result > 21:
  69.         if 11 in cardlist:
  70.             cardlist.remove(11)
  71.             cardlist.append(1)
  72.         return 0
  73.     else:
  74.         return result
  75.    
  76.  
  77. def calculate_again(flow):
  78.     user_score = calculate_score(user_cards)
  79.     computer_score = calculate_score(computer_cards)
  80.     game_result = compare(user_score, computer_score, flow)
  81.     if game_result != "":
  82.         print(f"Your final hand : {user_cards}")
  83.         print(f"Computer's final hand {computer_cards}")
  84.         print(game_result)
  85.     else:
  86.         return game_result
  87.  
  88.    
  89.  
  90. def compare(user_score, computer_score, flow):
  91.     if flow == 'n':
  92.         if user_score == computer_score == 0:
  93.             return "It is a draw."
  94.         elif user_score == 0:
  95.             return "You went over. Computer  win"
  96.         elif computer_score == 0:
  97.             return "Computer went over. You win"
  98.         elif user_score > computer_score:
  99.             return "Your score is higher. You win"
  100.         elif user_score < computer_score:
  101.             return "Computer's score is higher. You loss"
  102.     else:
  103.         if(user_score == computer_score == 0):
  104.             return "It is a draw."
  105.         elif user_score == 0:
  106.             return "You went over. Computer  win"
  107.         elif(computer_score == 0):
  108.             return "Computer went over. You win"
  109.         elif user_score > computer_score:
  110.             return "Your score is higher. You win"
  111.         elif user_score < computer_score:
  112.             return "Computer's score is higher. You loss"
  113.         else:
  114.             flow = input("Do you want to draw another card? Type 'y' to draw a card, 'n' to cancel.")
  115.             if(flow.lower() == 'y'):
  116.                 deal_card_user()
  117.                 game_result = calculate_again()
  118.                 if game_result != "":
  119.                     return
  120.             else:
  121.                 game_result = calculate_again()
  122.                 if game_result != "":
  123.                     return
  124.  
  125.  
  126. def main():
  127.     clear()
  128.     print(art.logo)
  129.     deal_card_user()
  130.     deal_card_user()
  131.     deal_card_computer()
  132.     deal_card_computer()
  133.     print(f"Your card: {user_cards}")
  134.     print(f"Computer's first card {computer_cards[0]}")
  135.     flow = input("Type 'y' to get another card, type 'n' to pass: ")
  136.     while flow == 'y':
  137.         deal_card_user()
  138.         game_result = calculate_again(flow)
  139.         if game_result == "":
  140.             print(f"Your card: {user_cards}")
  141.             print(f"Computer's first card {computer_cards[0]}")
  142.             flow = input("Type 'y' to get another card, type 'n' to pass: ")
  143.             calculate_again(flow)
  144.         else:
  145.             startgame()
  146.        
  147.  
  148. startgame()
  149.  
  150.  
  151.  
  152.  
  153. #Hint 5: Deal the user and computer 2 cards each using deal_card() and append().
  154. user_cards = []
  155. computer_cards = []
  156.  
  157. #Hint 6: Create a function called calculate_score() that takes a List of cards as input
  158. #and returns the score.
  159. #Look up the sum() function to help you do this.
  160.  
  161.  
  162.  
  163. #Hint 7: Inside calculate_score() check for a blackjack (a hand with only 2 cards: ace + 10) and return 0 instead of the actual score. 0 will represent a blackjack in our game.
  164.  
  165. #Hint 8: Inside calculate_score() check for an 11 (ace). If the score is already over 21, remove the 11 and replace it with a 1. You might need to look up append() and remove().
  166.  
  167. #Hint 9: Call calculate_score(). If the computer or the user has a blackjack (0) or if the user's score is over 21, then the game ends
  168.  
  169.  
  170. #Hint 10: If the game has not ended, ask the user if they want to draw another card. If yes, then use the deal_card() function to add another card to the user_cards List. If no, then the game has ended.
  171.  
  172. #Hint 11: The score will need to be rechecked with every new card drawn and the checks in Hint 9 need to be repeated until the game ends.
  173.  
  174. #Hint 12: Once the user is done, it's time to let the computer play. The computer should keep drawing cards as long as it has a score less than 17.
  175.  
  176. #Hint 13: Create a function called compare() and pass in the user_score and computer_score. If the computer and user both have the same score, then it's a draw. If the computer has a blackjack (0), then the user loses. If the user has a blackjack (0), then the user wins. If the user_score is over 21, then the user loses. If the computer_score is over 21, then the computer loses. If none of the above, then the player with the highest score wins.
  177.  
  178. #Hint 14: Ask the user if they want to restart the game. If they answer yes, clear the console and start a new game of blackjack and show the logo from art.py.
  179.  
Add Comment
Please, Sign In to add comment