diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Blackjack.py b/Blackjack.py new file mode 100644 index 0000000..59fb18c --- /dev/null +++ b/Blackjack.py @@ -0,0 +1,220 @@ +import random + +suits = ('Hearts', 'Spades', 'Diamonds', 'Clubs') +ranks = ('Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Jack', 'Queen', 'King', 'Ace') +values = {'Two': 2, 'Three': 3, 'Four': 4, 'Five': 5, 'Six': 6, 'Seven': 7, 'Eight': 8, 'Nine': 9, 'Ten': 10, + 'Jack': 10, + 'Queen': 10, 'King': 10, 'Ace': 11} + +playing = True + + +class Card: + + def __init__(self, suit, rank): + self.suit = suit + self.rank = rank + + def __str__(self): + return self.rank + ' of ' + self.suit + +class Deck: + + def __init__(self): + self.deck = [] # start with an empty list + for suit in suits: + for rank in ranks: + self.deck.append(Card(suit, rank)) # build Card objects and add them to the list + + def __str__(self): + deck_comp = '' # start with an empty string + for card in self.deck: + deck_comp += '\n ' + card.__str__() # add each Card object's print string + return 'The deck has:' + deck_comp + + def shuffle(self): + random.shuffle(self.deck) + + def deal(self): + single_card = self.deck.pop() + return single_card + +class Hand: + + def __init__(self): + self.cards = [] # start with an empty list as we did in the Deck class + self.value = 0 # start with zero value + self.aces = 0 # add an attribute to keep track of aces + + def add_card(self, card): + self.cards.append(card) + self.value += values[card.rank] + if card.rank == 'Ace': + self.aces += 1 # add to self.aces + + def adjust_for_ace(self): + while self.value > 21 and self.aces: + self.value -= 10 + self.aces -= 1 + + +class Chips: + + def __init__(self): + self.total = 100 # This can be set to a default value or supplied by a user input + self.bet = 0 + + def win_bet(self): + self.total += self.bet + + def lose_bet(self): + self.total -= self.bet + + +def take_bet(chips): + while True: + try: + chips.bet = int(input('How many chips would you like to bet? ')) + except ValueError: + print('Sorry, a bet must be an integer!') + else: + if chips.bet > chips.total: + print("Sorry, your bet can't exceed", chips.total) + else: + break + + +def hit(deck, hand): + hand.add_card(deck.deal()) + hand.adjust_for_ace() + + +def hit_or_stand(deck, hand): + global playing # to control an upcoming while loop + + while True: + x = input("Would you like to Hit or Stand? Enter 'h' or 's' ") + + if x[0].lower() == 'h': + hit(deck, hand) # hit() function defined above + + elif x[0].lower() == 's': + print("Player stands. Dealer is playing.") + playing = False + + else: + print("Sorry, please try again.") + continue + break + + +def show_some(player, dealer): + print("\nDealer's Hand:") + print("