Create card games for the terminal
Project description
terminal_playing_cards
Python 📦 for building playing card games in the terminal.
Checkout how pretty these cards look in a terminal window!
Checkout this blackjack repo for an example of how to use terminal_playing_cards to create python card games that run in a terminal window.
Getting started
:arrow_down: Install the package from PyPI.
pip install terminal_playing_cards
:hammer: Build a standard 52 playing card deck.
from terminal_playing_cards import Deck
deck = Deck()
:arrows_counterclockwise: Shuffle the deck, deal out some cards, and convert the list of cards into a View that can be printed to the terminal.
>>> from terminal_playing_cards import View
>>> deck.shuffle()
# Deal 5 cards
>>> player_1_hand = View([deck.pop() for _ in range(5)])
>>> print(player_1_hand)
Customize a View
Negative spacing
If you anticipate having a lot of cards in a single View, specify a negative value for the View.spacing attribute.
>>> player_1_hand = View(
... cards=[deck.pop() for _ in range(5)],
... spacing=-5
... )
>>> print(player_1_hand)
Sorting
Whenever I play card games, I have a particular way I like to sort my hand. Use the View.sort() method to sort a View by value, suit, or both!
>>> player_1_hand.sort()
>>> print(player_1_hand)
If you prefer to sort purely by value, specify that in sort_order.
>>> player_1_hand.sort(sort_order=["value"])
>>> print(player_1_hand)
See help(View.sort) for further details.
Adding cards
Adding cards to a View is easy! Just deal another card from the deck, and add it to the existing view.
>>> next_card = deck.pop()
>>> player_1_hand += [next_card]
>>> print(player_1_hand)
Notice that this was done with a list of Card objects. This allows multiple cards to be added into a View at one time, and also allows two View objects to be added together.
Removing cards
Since View inherits many of it's methods from Deck, use the View.pop() to kick cards out of a View
>>> played_card = player_1_hand.pop()
>>> print(played_card)
And now our hand doesn't have that card in it anymore.
>>> print(player_1_hand)
Customize a Deck
Customize card values
In a game like Blackjack, face cards are all valued at ten. But the default deck specifications assign a jack a value of eleven. Set the specifications parameter to customize options like card values.
>>> blackjack_deck = Deck(specifications=["face_cards"])
See help(Deck) for more details on how to customize Deck build specifications.
Hidden cards
If you were going to build a game like Texas hold'em then you would want to hide the turn and the river cards by default.
When building the Deck, set the hidden parameter to hide all cards when printed to the terminal by default.
>>> hidden_deck = Deck(hidden=True)
>>> top_card = hidden_deck.pop()
>>> print(top_card)
This ensures that that "back" of a card is printed to the terminal, rather than the regular face. In order to reveal this card, set the Card.hidden attribute to False.
>>> top_card.hidden = False
>>> print(top_card)
Add Joker cards
Jokers aren't included in a Deck by default. Add them in after the fact if you need them for your game.
>>> from terminal_playing_cards import Card
>>> deck = Deck()
>>> jokers = [Card("JK", suit="none") for _ in range(2)]
>>> deck += jokers
>>> print(deck[53])
Remove face card emojis
On some terminal windows, emoji's don't print out as expected. Check out how the queen of hearts prints out in the cmder console emulator.
:rage: Why is it messed up??? :rage:
Never fear! If this happens on your terminal, make sure to set picture parameter to False when building the Deck.
>>> no_pic_deck = Deck(picture=False)
# Default position of queen of hearts in a sorted Deck
>>> queen_hearts = no_pic_deck[47]
>>> print(queen_hearts)
:+1: That's more like it!
Built-in methods
Math with Cards
All cards have a Card.value attribute that is used for logical comparisions and simple arithmetic with numbers and other Card objects.
>>> from terminal_playing_cards import Card
>>> ace_spades = Card("A", "spades", value=1)
>>> ace_hearts = Card("A", "hearts", value=1)
>>> two_hearts = Card("2", "hearts", value=2)
>>> ace_spades < two_hearts
True
>>> ace_spades == ace_hearts
True
>>> two_hearts - 1
1
>>> sum([ace_spades, ace_hearts, two_hearts])
4
Note: Equality is based on value alone. This is why the ace_spades is equal to the ace_hearts even though they have different suits.
Iterate through a Deck/View
Iteration is simple, treat a Deck/View as a list of Card objects.
>>> deck = Deck()
>>> hand = View([deck.pop() for _ in range(3)])
>>> for card in hand:
... print(repr(card))
Card('A', 'clubs', value=1, hidden=False, picture=True)
Card('A', 'diamonds', value=1, hidden=False, picture=True)
Card('A', 'spades', value=1, hidden=False, picture=True)
>>> for card in deck[:3]:
... print(repr(card))
Card('A', 'hearts', value=1, hidden=False, picture=True)
Card('2', 'clubs', value=2, hidden=False, picture=True)
Card('2', 'diamonds', value=2, hidden=False, picture=True)
Check the length of a Deck/View
Easy-peasy.
>>> deck = Deck()
>>> len(deck)
52
>>> hand = View([deck.pop() for _ in range(3)])
>>> len(hand)
3
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file terminal_playing_cards-0.1.0.tar.gz.
File metadata
- Download URL: terminal_playing_cards-0.1.0.tar.gz
- Upload date:
- Size: 13.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/0.12.17 CPython/3.6.4 Windows/10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bbc540da1e5ce81b4652e8f5b92748f5d495bc2affd338ed708965c6db0a17d4
|
|
| MD5 |
7ac1d0ee044a971a0da31073f3f48667
|
|
| BLAKE2b-256 |
16fa3f1d835036d8783e532eddf0bd72fb11fcb5d672a2bd7b16636ee2088b01
|
File details
Details for the file terminal_playing_cards-0.1.0-py3-none-any.whl.
File metadata
- Download URL: terminal_playing_cards-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/0.12.17 CPython/3.6.4 Windows/10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ba3e274d10fae133362a5cc2cb2505f4d859a131a06290ad3f9442387674eca9
|
|
| MD5 |
d5b86dad893dd177880cf7f843a0ecb9
|
|
| BLAKE2b-256 |
383b01ace752c5d4df6c8b7fef72bcb79f3729747c0142a7b5a0e243cbe06a99
|