예제 #1
0
class Blackjack(object):
    def __init__(self, human=False):
        self.human = human
        self.deck = Deck()
        self.players = []

        # dealer goes to end of list
        self.players.append( self.create_dealer("Dealer", 1000000, self.deck) )

        # players get added to the front of list
        self.players.insert( 0, self.create_player("Player_1", 200, self.deck) )

        self.winner = None
        self.loser = None
        self.pot = []

    def create_dealer(self, title, cash, deck):
        if self.human:
            name = raw_input("Enter %s's name: " % title)
            cash = raw_input("Enter %s's cash: " % cash)
        else:
            name = title
            cash = 0 if cash == "amount" else cash
        print 'Created Dealer '+name+' with $'+str(cash)
        return Dealer(name, cash, deck)


    def create_player(self, title, cash, deck):
        if self.human:
            name = raw_input("Enter %s's name: " % title)
            cash = raw_input("Enter %s's cash: " % cash)
        else:
            name = title
            cash = 0 if cash == "amount" else cash
        print 'Created Player '+name+' with $'+str(cash)
        return Player(name, cash, deck)



    def play_game(self):
        print '=== start playin ==='
        # while len(self.players) > 1: # there are players besides the dealer
        self.play_round()

        self.pause()
        print '=== play 1 round & exit ==='
        sys.exit()

        return

    def play_round(self):

        self.place_bets()
        self.deck.shuffle()
        self.deal()

        self.display_hands()

        # play action
        print '\n--- play action! ---'
        for player in self.players:
            player.play_action()

        self.determine_win_loss()
        self.do_money()

        self.display_hands()

    def place_bets(self):
        print '\n--- placing bets ---'
        for player in self.players:
            player.make_bet() # returns a false if out of $$$. need to do something.....
        return

    def deal(self):
        print '\n--- dealing hands ---'
        # give each player 1st card, then 2nd card
        for i in range(2):
            for player in self.players:
                player.receive_card( self.deck.draw_card() )

    def determine_win_loss(self):
        print '\n--- deterining winners / losers ---'

        # check dealer status...
        dealer = self.players[-1]
        if dealer.busted:
            print 'Dealer BUSTED. EVERYONE WIN!!!!!!!'
        else:
            dealer_value = dealer.hand_value()
            print 'Dealer = '+str(dealer_value)

            # loop thru each player
            for player in self.players[:-1]:
                player_val = player.hand_value()
                print player.name+' hand = '+str(player_val)
                if player_val > dealer_value and (not player.busted):
                    print player.name+' WON!'
                else:
                    print player.name+' Loss...'


    def do_money(self):
        print '\n--- do money ---'
        for player in self.players:
            pass
        pass

    def display_hands(self):
        for player in self.players:
            player.display_hand()







    def display_play(self, card1, card2):
        if self.human:
            print "%s plays %s" % (self.player1.name, str(card1))
            print "%s plays %s" % (self.player2.name, str(card2))

    def display_receive(self, player):
        if self.human:
            self.pot.sort(reverse=True)
            pot_str = self.cards_to_str(self.pot)
            print "%s receives the cards: %s" % (player.name, pot_str)

    def display_war(self, cards1, cards2):
        if self.human:
            print "WAR!"
            print "%s plays %s" % (self.player1.name, self.cards_to_str(cards1))
            print "%s plays %s" % (self.player2.name, self.cards_to_str(cards2))



    def draw_card(self, player, other_player):
        card = player.play_card()
        if not card:
            self.winner = other_player.name
            self.loser = player.name
            return
        self.pot.append(card)
        return card




    def draw_cards(self, player, other_player, n):
        cards = []
        n = min(n, len(player.hand), len(other_player.hand))
        for i in xrange(n):
            card = self.draw_card(player, other_player)
            if not card:
                return
            cards.append(card)
        return cards

    def war(self):
        cards1 = self.draw_cards(self.player1, self.player2, self.WarCnt)
        cards2 = self.draw_cards(self.player2, self.player1, self.WarCnt)
        self.display_war(cards1, cards2)


    def give_cards(self, player):
        player.receive_cards(self.pot)
        self.display_receive(player)
        self.pot = []

    def pause(self):
        if self.human:
            raw_input("")

    def cards_to_str(self, cards):
        return " ".join(str(card) for card in cards)


    def display_winner(self):
        if self.human:
            print "The winner is %s!!!" % self.winner

    def play_two_of_three(self):
        for i in range(3):
            winner = self.play_game()
            if not self.win_counts.get(winner):
                self.win_counts[winner] = 1
            else:
                self.win_counts[winner] += 1
예제 #2
0
class Blackjack(object):
    def __init__(self, human=False):
        self.human = human
        self.deck = Deck()
        self.players = []

        # dealer goes to end of list
        self.players.append(self.create_dealer("Dealer", 1000000, self.deck))

        # players get added to the front of list
        self.players.insert(0, self.create_player("Player_1", 200, self.deck))

        self.winner = None
        self.loser = None
        self.pot = []

    def create_dealer(self, title, cash, deck):
        if self.human:
            name = raw_input("Enter %s's name: " % title)
            cash = raw_input("Enter %s's cash: " % cash)
        else:
            name = title
            cash = 0 if cash == "amount" else cash
        print 'Created Dealer ' + name + ' with $' + str(cash)
        return Dealer(name, cash, deck)

    def create_player(self, title, cash, deck):
        if self.human:
            name = raw_input("Enter %s's name: " % title)
            cash = raw_input("Enter %s's cash: " % cash)
        else:
            name = title
            cash = 0 if cash == "amount" else cash
        print 'Created Player ' + name + ' with $' + str(cash)
        return Player(name, cash, deck)

    def play_game(self):
        print '=== start playin ==='
        # while len(self.players) > 1: # there are players besides the dealer
        self.play_round()

        self.pause()
        print '=== play 1 round & exit ==='
        sys.exit()

        return

    def play_round(self):

        self.place_bets()
        self.deck.shuffle()
        self.deal()

        self.display_hands()

        # play action
        print '\n--- play action! ---'
        for player in self.players:
            player.play_action()

        self.determine_win_loss()
        self.do_money()

        self.display_hands()

    def place_bets(self):
        print '\n--- placing bets ---'
        for player in self.players:
            player.make_bet(
            )  # returns a false if out of $$$. need to do something.....
        return

    def deal(self):
        print '\n--- dealing hands ---'
        # give each player 1st card, then 2nd card
        for i in range(2):
            for player in self.players:
                player.receive_card(self.deck.draw_card())

    def determine_win_loss(self):
        print '\n--- deterining winners / losers ---'

        # check dealer status...
        dealer = self.players[-1]
        if dealer.busted:
            print 'Dealer BUSTED. EVERYONE WIN!!!!!!!'
        else:
            dealer_value = dealer.hand_value()
            print 'Dealer = ' + str(dealer_value)

            # loop thru each player
            for player in self.players[:-1]:
                player_val = player.hand_value()
                print player.name + ' hand = ' + str(player_val)
                if player_val > dealer_value and (not player.busted):
                    print player.name + ' WON!'
                else:
                    print player.name + ' Loss...'

    def do_money(self):
        print '\n--- do money ---'
        for player in self.players:
            pass
        pass

    def display_hands(self):
        for player in self.players:
            player.display_hand()

    def display_play(self, card1, card2):
        if self.human:
            print "%s plays %s" % (self.player1.name, str(card1))
            print "%s plays %s" % (self.player2.name, str(card2))

    def display_receive(self, player):
        if self.human:
            self.pot.sort(reverse=True)
            pot_str = self.cards_to_str(self.pot)
            print "%s receives the cards: %s" % (player.name, pot_str)

    def display_war(self, cards1, cards2):
        if self.human:
            print "WAR!"
            print "%s plays %s" % (self.player1.name,
                                   self.cards_to_str(cards1))
            print "%s plays %s" % (self.player2.name,
                                   self.cards_to_str(cards2))

    def draw_card(self, player, other_player):
        card = player.play_card()
        if not card:
            self.winner = other_player.name
            self.loser = player.name
            return
        self.pot.append(card)
        return card

    def draw_cards(self, player, other_player, n):
        cards = []
        n = min(n, len(player.hand), len(other_player.hand))
        for i in xrange(n):
            card = self.draw_card(player, other_player)
            if not card:
                return
            cards.append(card)
        return cards

    def war(self):
        cards1 = self.draw_cards(self.player1, self.player2, self.WarCnt)
        cards2 = self.draw_cards(self.player2, self.player1, self.WarCnt)
        self.display_war(cards1, cards2)

    def give_cards(self, player):
        player.receive_cards(self.pot)
        self.display_receive(player)
        self.pot = []

    def pause(self):
        if self.human:
            raw_input("")

    def cards_to_str(self, cards):
        return " ".join(str(card) for card in cards)

    def display_winner(self):
        if self.human:
            print "The winner is %s!!!" % self.winner

    def play_two_of_three(self):
        for i in range(3):
            winner = self.play_game()
            if not self.win_counts.get(winner):
                self.win_counts[winner] = 1
            else:
                self.win_counts[winner] += 1
예제 #3
0
class Blackjack(object):
    def __init__(self, starting_cash=10000, bet=2000):
        self.starting_cash = starting_cash
        self.bet = bet
        self.player = Player(starting_cash)
        self.dealer = Dealer()

    def deal(self):
        print("Player - ${}".format(self.player.money))
        self.deck = Deck()
        self.deck.shuffle()
        self.player.clear()
        self.dealer.clear()
        self.player.receive_card(self.deck.draw_card())
        self.dealer.receive_card(self.deck.draw_card())
        self.player.receive_card(self.deck.draw_card())
        self.dealer.receive_card(self.deck.draw_card())

        self.player_choice()

    def show_player(self):
        print(self.player.hand_text() + " ({})".format(self.player.hand_total))

    def hide_dealer(self):
        print("Dealer: " + str(self.dealer.hand[0]) + "    ?")

    def show_dealer(self):
        print(self.dealer.hand_text() + " ({})".format(self.dealer.hand_total))

    def player_choice(self):
        self.show_player()
        self.hide_dealer()
        print("Options: Hit   Stay  Quit ")
        p_choice = input('>>> ')
        p_choice.lower()
        if p_choice == 'hit':
            self.player_hit()
        elif p_choice == 'stay':
            self.player_stay()
        elif p_choice == 'quit':
            self.player.money -= self.bet
            self.end_game()
        else:
            print("Not an option")
            self.player_choice()

    def player_hit(self):
        self.player.receive_card(self.deck.draw_card())
        if self.player.hand_total > 21:
            self.show_player()
            self.show_dealer()
            self.dealer_win()
        elif self.player.hand_total == 21:
            self.show_player()
            self.dealer_choice()
        else:
            self.player_choice()

    def player_stay(self):
        self.dealer_choice()

    def end_game(self):
        print("Player leaves with ${}".format(self.player.money))

    def dealer_choice(self):
        self.show_dealer()
        while self.dealer.hand_total < 17:
            self.dealer.receive_card(self.deck.draw_card())
            self.show_dealer()
        if self.dealer.hand_total > 21 or self.dealer.hand_total < self.player.hand_total:
            self.player_win()
        else:
            self.dealer_win()

    def play_again(self):
        again = input('>>> ')
        again.lower()
        if again == 'y':
            self.deal()
        elif again == 'n':
            self.end_game()
        else:
            print("?")
            self.play_again()

    def player_win(self):
        self.player.money += self.bet / 2
        print("You win ${} (${}). Play again? Y/N".format(
            self.bet, self.player.money))
        self.play_again()

    def dealer_win(self):
        print('You lose ${}'.format(self.bet))
        self.player.money -= self.bet
        if self.player.money < self.bet:
            print("Dealer wins. Out of money.")
        else:
            print("Dealer wins. You have $({}). Play again? Y/N".format(
                self.player.money))
            self.play_again()