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
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 |