Skip to content
Rahul Nanwani edited this page Jan 11, 2022 · 14 revisions

blackjack21 1.0.x

A complete package for creating a multiplayer blackjack table.

Features

  • Create Tables.
  • Max. 5 players per table.
  • Hit, Stand, Double Down, Split.

Wiki Guide

Installation

Install Basic

pip install blackjack21

Upgrade

pip install --upgrade blackjack21

Install a specific version

pip install blackjack21==1.0.0

Basic Example

from blackjack21 import Table


def print_cards(player):
    print(f"\n{player.name}")
    for card in player.hand:
        print(f"{card.rank} of {card.suit}")
    print(player.total)


def play_round(player):
    print_cards(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 show_result(table):
    print_cards(table.dealer)
    print(f"\nDealer has {table.dealer.total}")
    for player in table.players:
        result = player.get_result()
        if result > 0:
            print(f"{player.name} wins ${player.bet} ({player.total})")
        elif result == 0:
            print(f"{player.name}, hand tied ({player.total})")
        else:
            print(f"{player.name} loses ${player.bet} ({player.total})")


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

    table = Table(players)
    table.dealer.deal_cards()

    for player in table.players:
        play_round(player)

    table.dealer.play_dealer()
    show_result(table)


if __name__ == "__main__":
    main()

Advanced Example

from blackjack21 import Table


def print_cards(player):
    print(f"\n{player.name}")
    for card in player.hand:
        print(f"{card.rank} of {card.suit}")
    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(player):
    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.get_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"{player.name}, 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.players:
        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)
    table.dealer.deal_cards()

    for player in table.players:
        play_round(player)

    table.dealer.play_dealer()
    show_result(table)


if __name__ == "__main__":
    main()

Classes

Table

Table(players, dealer, suits, ranks)

Arguments:

  • players: A tuple of player tuples, where a player tuple is as (name: str, bet: int) (Min. 1 player, Max. 5 players)
  • dealer: Name of the dealer as a string (Default: "Dealer")
  • suits: A tuple of 4 suits (Default: ("Hearts", "Diamonds", "Spades", "Clubs"))
  • ranks: A tuple of 13 ranks ace to king (Default: ("A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"))

Attributes:

  • players: A tuple of Player objects
  • dealer: Dealer object
  • deck: A list of Card objects in the deck

Dealer

This object will be created by creating a Table object.

Attributes:

  • name: Dealer name string
  • hand: A list of Card objects in the dealer's hand
  • total: Sum of the card values in the hand
  • bust: A bool if the dealer has a total of more than 21
  • stand: A bool if the dealer has a total of more than 17

Methods:

  • deal_cards(): This method will deal two cards to each hand and self(the dealer's total will be considered only for the first card), returns a bool for successful dealing of cards to each hand
  • play_dealer(): Use this method after all players have finished playing their hand, returns None

Card

A list of these objects will be created under the list deck attribute of the Table object.

Attributes:

  • suit: Suit of the card as a string
  • rank: Rank of the card as a string
Clone this wiki locally