Single-player Blackjack including graphical and command line interfaces, written in Python. Can be used to simulate games with or without card counting and to practise basic strategy.
blackjack-gui
requires Python 3.10 or newer and uses tkinter. Make sure it's installed in your system:
$ sudo apt install python3-tk
or similar (otherwise, you'll see ModuleNotFoundError: No module named 'tkinter'
).
Then:
$ python3 -m venv venv
$ source venv/bin/activate
$ pip3 install blackjack-gui
blackjack [-h] [--cli] [--ai] [--count] [--bet BET] [--stack STACK]
[--n-games N_GAMES] [--loglevel LOGLEVEL] [--cards CARDS]
[--dealer-cards DEALER_CARDS] [--subset {hard,soft,pairs,hard/soft,soft/pairs}]
[--rules {US,Helsinki}]
Name | Default | Description |
---|---|---|
--cli |
False |
Use command line version. |
--ai |
False |
If True, computer plays instead of you. Only with --cli . |
--count |
False |
If True, ai uses card counting. Only with --cli and --ai . |
--bet |
1 | Bet size (max 100). |
--stack |
1000 | Initial stack. |
--n-games |
10 | Number of rounds to be played. Only with --cli . |
--loglevel |
DEBUG |
Adjust amount of logging: DEBUG or INFO. Only with --cli . |
--cards |
Determine the first player cards, e.g. --cards=A,8,K . Shuffles the shoe after every hand. Multiple options (one will be randomly selected) can be defined like this: "A,7;9,9;10,2" . |
|
--subset |
Instead of --cards , practice with one of the subsets: hard , soft , pairs , hard/soft , or soft/pairs |
|
--dealer-cards |
Determine the first dealer cards. Useful for testing. | |
--rules |
Helsinki |
Rules to be used. Can be Helsinki or US . See the basic strategy charts below. |
Open the GUI version with Casino Helsinki Rules:
$ blackjack
With US rules:
$ blackjack --rules US
With the default settings, play 10 rounds of Blackjack with the command line interface:
$ blackjack --cli
Let the computer play perfect basic game and use card counting technique to bring down the house:
$ blackjack --cli --ai --count --n-games=100000 --loglevel=INFO
Simulate soft 19 starting hand only:
$ blackjack --cli --ai --n-games=10000 --loglevel=INFO --cards=A,8
Practise to play "hard" starting hands:
$ blackjack --subset hard
Blackjack rules vary depending on the casino. In this application they follow the rules of Casino Helsinki, explained in Finnish here, i.e.:
- 6 decs
- Blackjack pays 3 to 2
- Dealer must stand on soft 17
- Any two cards can be doubled
- Max. 4 hands can be achieved by splitting
- Aces can be split but they receive only one extra card
- Doubling after splitting is allowed
- Dealer peek not in use
- Early surrender is allowed but not against Ace
- A 7-7-7 with the first three cards (not in a split game) pays 3 to 1 directly
See overview of the most common rule variations here.
- Note that 16 vs 10 with 3 or more cards = Stay
- 7,7 would be normally Surrender, but not in Helsinki because of the 7-7-7 rule
The rules in the U.S. typically include:
- Dealer must hit on soft 17
- Dealer peek is in use
- Late surrender is not available
- Doubling and splitting rules same as above
Install blackjack-gui
with dev-dependencies from GitHub:
git clone https://github.com/tukiains/blackjack-gui
cd blackjack-gui/
python3 -m venv venv
source venv/bin/activate
pip3 install --upgrade pip
pip3 install .[dev,test]
pre-commit install
Run unit and integration tests:
pytest tests/unit.py
pytest tests/integration.py
Run pre-commit
checks:
pre-commit run --all
- Deviations from the basic strategy are not yet implemented.
- Card images taken from here.
MIT