Skip to content

Latest commit

 

History

History
95 lines (73 loc) · 2.42 KB

advanced_example.md

File metadata and controls

95 lines (73 loc) · 2.42 KB

Advanced Example

from blackjack21 import Table, Dealer

def print_cards(player):
    print(f"\n{player.name}")
    for i, card in enumerate(player.hand):
        if (type(player) != Dealer) or (type(player) == Dealer and i == 0):
            print(f"{card.rank} of {card.suit}")
    if type(player) != Dealer:
        print(player.total)


def play_hit_or_stand(player):
    while not (player.bust or player.stand):
        action = int(input("\nHit(1), Stand(2): "))
        if action == 1:
            player.play_hit()
            print_cards(player)
        elif action == 2:
            player.play_stand()


def play_round(table, player):
    print_cards(table.dealer)
    print_cards(player)

    if player.can_split:
        action = int(input("\nHit(1), Stand(2), Double down(3), Split(4): "))
    else:
        action = int(input("\nHit(1), Stand(2), Double down(3): "))

    if action == 1:
        player.play_hit()
        print_cards(player)
    elif action == 2:
        player.play_stand()
    elif action == 3:
        player.play_double_down()
        print_cards(player)
    elif action == 4 and player.can_split:
        player.play_split()
        print_cards(player)

    play_hit_or_stand(player)

    if player.split:
        print_cards(player.split)
        play_hit_or_stand(player.split)


def print_player_result(player):
    result = player.result
    if result == 3:
        print(f"The dealer is bust, {player.name} wins ${player.bet} ({player.total})")
    elif result in [1, 2]:
        print(f"{player.name} wins ${player.bet} ({player.total})")
    elif result == 0:
        print(f"Hand tied ({player.total})")
    elif result == -1:
        print(f"{player.name} loses ${player.bet} ({player.total})")
    else:
        print(f"{player.name} is bust, loses ${player.bet} ({player.total})")


def show_result(table):
    print_cards(table.dealer)
    print(f"\nDealer has {table.dealer.total}")
    for player in table:
        print_player_result(player)
        if player.split:
            print_player_result(player.split)


def main():
    a = ("Charlotte", 100)
    b = ("Jennifer", 200)
    players = (a, b)

    table = Table(players)

    dealer_first_card = table.dealer.hand[0]
    print(f"Dealer: {dealer_first_card.rank} of {dealer_first_card.suit} and ?")

    for player in table:
        play_round(table, player)

    table.dealer.play_dealer()
    show_result(table)


if __name__ == "__main__":
    main()