Menu

[Solved]-Python Improve Blackjack Project Allowing Players Bet Keep Track Player S Bankroll Remove Q37243538

With Python. Improve the Blackjack project by allowing playersto bet. Keep track of each player’s bankroll and remove any playerwho runs out of money.

# Blackjack
# From 1 to 7 players compete against a dealer

import cards, games   

class BJ_Card(cards.Card):
    “”” A Blackjack Card. “””
    ACE_VALUE = 1

    @property
    def value(self):
        ifself.is_face_up:
           v = BJ_Card.RANKS.index(self.rank) + 1
           if v > 10:
               v = 10
        else:
           v = None
        return v

class BJ_Deck(cards.Deck):
    “”” A Blackjack Deck. “””
    def populate(self):
        for suit inBJ_Card.SUITS:
           for rank in BJ_Card.RANKS:
               self.cards.append(BJ_Card(rank, suit))

    def deal(self, hands, per_hand = 1):
        for rounds inrange(per_hand):
           for hand in hands:
               if len(self.cards) >= (per_hand * len(hands)):
                   top_card = self.cards[0]
                   self.give(top_card, hand)
               else:
                   print (“Reshuffling deck.”)
                   self.cards = []
                   self.populate()
                   self.shuffle()
                   # Remember to deal out a card:
                   top_card = self.cards[0]
                   self.give(top_card, hand)
  

class BJ_Hand(cards.Hand):
    “”” A Blackjack Hand. “””
    def __init__(self, name):
        super(BJ_Hand,self).__init__()
        self.name = name

    def __str__(self):
        rep = self.name + “:t”+ super(BJ_Hand, self).__str__()
        if self.total:
           rep += “(” + str(self.total) +”)”      
        return rep

    @property   
    def total(self):
        # if a card in the handhas value of None, then total is None
        for card inself.cards:
           if not card.value:
               return None
      
        # add up card values,treat each Ace as 1
        t = 0
        for card inself.cards:
             t += card.value

        # determine if handcontains an Ace
        contains_ace =False
        for card inself.cards:
           if card.value == BJ_Card.ACE_VALUE:
               contains_ace = True
              
        # if hand contains Aceand total is low enough, treat Ace as 11
        if contains_ace and t<= 11:
           # add only 10 since we’ve already added 1 for the Ace
           t += 10
              
        return t

    def is_busted(self):
        return self.total >21

class BJ_Player(BJ_Hand):
    “”” A Blackjack Player. “””
    def is_hitting(self):
        response =games.ask_yes_no(“n” + self.name + “, do you want a hit? (Y/N):”)
        return response ==”y”

    def bust(self):
        print(self.name,”busts.”)
        self.lose()

    def lose(self):
        print(self.name,”loses.”)

    def win(self):
        print(self.name,”wins.”)

    def push(self):
        print(self.name,”pushes.”)

      
class BJ_Dealer(BJ_Hand):
    “”” A Blackjack Dealer. “””
    def is_hitting(self):
        return self.total <17

    def bust(self):
        print(self.name,”busts.”)

    def flip_first_card(self):
        first_card =self.cards[0]
        first_card.flip()

class BJ_Game(object):
    “”” A Blackjack Game. “””
    def __init__(self,names):    
        self.players = []
        for name in names:
           player = BJ_Player(name)
           self.players.append(player)

        self.dealer =BJ_Dealer(“Dealer”)

        self.deck =BJ_Deck()
       self.deck.populate()
        self.deck.shuffle()

    @property
    def still_playing(self):
        sp = []
        for player inself.players:
           if not player.is_busted():
               sp.append(player)
        return sp

    def __additional_cards(self, player):
        while notplayer.is_busted() and player.is_hitting():
           self.deck.deal([player])
           print(player)
           if player.is_busted():
               player.bust()
         
    def play(self):
        # deal initial 2 cardsto everyone
       self.deck.deal(self.players + [self.dealer], per_hand = 2)
       self.dealer.flip_first_card()    # hide dealer’sfirst card
        for player inself.players:
           print(player)
        print(self.dealer)

        # deal additionalcards to players
        for player inself.players:
           self.__additional_cards(player)

       self.dealer.flip_first_card()    # reveal dealer’sfirst

        if notself.still_playing:
           # since all players have busted, just show the dealer’s hand
           print(self.dealer)
        else:
           # deal additional cards to dealer
           print(self.dealer)
           self.__additional_cards(self.dealer)

           if self.dealer.is_busted():
               # everyone still playing wins
               for player in self.still_playing:
                   player.win()                  
           else:
               # compare each player still playing to dealer
               for player in self.still_playing:
                   if player.total > self.dealer.total:
                       player.win()
                   elif player.total < self.dealer.total:
                       player.lose()
                   else:
                       player.push()

        # remove everyone’scards
        for player inself.players:
           player.clear()
       self.dealer.clear()
      

def main():
    print(“ttWelcome to Blackjack!n”)
  
    names = []
    number = games.ask_number(“How many players? (1- 7): “, low = 1, high = 8)
    for i in range(number):
        name = input(“Enterplayer name: “)
        names.append(name)
    print()
      
    game = BJ_Game(names)

    again = None
    while again != “n”:
        game.play()
        again =games.ask_yes_no(“nDo you want to play again?: “)

main()
input(“nnPress the enter key to exit.”)

Expert Answer


Answer to With Python. Improve the Blackjack project by allowing players to bet. Keep track of each player’s bankroll and remove… . . .

OR


Leave a Reply

Your email address will not be published. Required fields are marked *