From 24a52a1693a59c0a980f7783e8ed49556e49f62b Mon Sep 17 00:00:00 2001 From: Aiman Date: Sat, 8 Oct 2022 12:32:55 +0530 Subject: [PATCH] added script for blackjack game --- scripts/Blackjack/README.md | 13 ++++++ scripts/Blackjack/art.py | 11 +++++ scripts/Blackjack/main.py | 86 +++++++++++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+) create mode 100644 scripts/Blackjack/README.md create mode 100644 scripts/Blackjack/art.py create mode 100644 scripts/Blackjack/main.py diff --git a/scripts/Blackjack/README.md b/scripts/Blackjack/README.md new file mode 100644 index 0000000..bdc5f97 --- /dev/null +++ b/scripts/Blackjack/README.md @@ -0,0 +1,13 @@ +RULES OF THE GAME: + +1. The goal of the game is to add up your cards to the largest number without going over 21. + +2. If the cards in your hand add up to more than 21, then it's called a bust. It means that you lose immediately. + +3. All the cards from 2 to 10 count as their face value. + +4. Jack, Queen and King each count as 10. + +5. Ace is a special card. The Ace can either count as a one towards your total, or it can count as an 11. + +6. Depending on whether, if you've gone over 21 or whether if you're under 21, you can decide which value you want your Ace to represent. diff --git a/scripts/Blackjack/art.py b/scripts/Blackjack/art.py new file mode 100644 index 0000000..51a6301 --- /dev/null +++ b/scripts/Blackjack/art.py @@ -0,0 +1,11 @@ + +logo = """ +.------. _ _ _ _ _ +|A_ _ |. | | | | | | (_) | | +|( \/ ).-----. | |__ | | __ _ ___| | ___ __ _ ___| | __ +| \ /|K /\ | | '_ \| |/ _` |/ __| |/ / |/ _` |/ __| |/ / +| \/ | / \ | | |_) | | (_| | (__| <| | (_| | (__| < +`-----| \ / | |_.__/|_|\__,_|\___|_|\_\ |\__,_|\___|_|\_\\ + | \/ K| _/ | + `------' |__/ +""" diff --git a/scripts/Blackjack/main.py b/scripts/Blackjack/main.py new file mode 100644 index 0000000..9681b37 --- /dev/null +++ b/scripts/Blackjack/main.py @@ -0,0 +1,86 @@ +import random +from art import logo + + +def deal_card(): + """Returns a random card from the deck.""" + cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10] + card = random.choice(cards) + return card + + +def calculate_score(cards): + """Take a list of cards and return the score calculated from the cards""" + + if sum(cards) == 21 and len(cards) == 2: + return 0 + + if 11 in cards and sum(cards) > 21: + cards.remove(11) + cards.append(1) + return sum(cards) + + +def compare(user_score, computer_score): + + if user_score > 21 and computer_score > 21: + return "You went over. You lose 😤" + + if user_score == computer_score: + return "Draw 🙃" + elif computer_score == 0: + return "Lose, opponent has Blackjack 😱" + elif user_score == 0: + return "Win with a Blackjack 😎" + elif user_score > 21: + return "You went over. You lose 😭" + elif computer_score > 21: + return "Opponent went over. You win 😁" + elif user_score > computer_score: + return "You win 😃" + else: + return "You lose 😤" + + +def play_game(): + + print(logo) + + user_cards = [] + computer_cards = [] + is_game_over = False + + for _ in range(2): + user_cards.append(deal_card()) + computer_cards.append(deal_card()) + + while not is_game_over: + + user_score = calculate_score(user_cards) + computer_score = calculate_score(computer_cards) + print(f" Your cards: {user_cards}, current score: {user_score}") + print(f" Computer's first card: {computer_cards[0]}") + + if user_score == 0 or computer_score == 0 or user_score > 21: + is_game_over = True + else: + + user_should_deal = input( + "Type 'y' to get another card, type 'n' to pass: ") + if user_should_deal == "y": + user_cards.append(deal_card()) + else: + is_game_over = True + + while computer_score != 0 and computer_score < 17: + computer_cards.append(deal_card()) + computer_score = calculate_score(computer_cards) + + print(f" Your final hand: {user_cards}, final score: {user_score}") + print( + f" Computer's final hand: {computer_cards}, final score: {computer_score}") + print(compare(user_score, computer_score)) + + +while input("Do you want to play a game of Blackjack? Type 'y' or 'n': ") == "y": + play_game()