Skip to main content

Create card games for the terminal

Project description

terminal_playing_cards

CircleCI codecov

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.

  1. Getting started
  2. Customize a View
  3. Customize a Deck
  4. Built-in methods

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

terminal_playing_cards-0.1.0.tar.gz (13.4 kB view details)

Uploaded Source

Built Distribution

terminal_playing_cards-0.1.0-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

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

Hashes for terminal_playing_cards-0.1.0.tar.gz
Algorithm Hash digest
SHA256 bbc540da1e5ce81b4652e8f5b92748f5d495bc2affd338ed708965c6db0a17d4
MD5 7ac1d0ee044a971a0da31073f3f48667
BLAKE2b-256 16fa3f1d835036d8783e532eddf0bd72fb11fcb5d672a2bd7b16636ee2088b01

See more details on using hashes here.

File details

Details for the file terminal_playing_cards-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for terminal_playing_cards-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ba3e274d10fae133362a5cc2cb2505f4d859a131a06290ad3f9442387674eca9
MD5 d5b86dad893dd177880cf7f843a0ecb9
BLAKE2b-256 383b01ace752c5d4df6c8b7fef72bcb79f3729747c0142a7b5a0e243cbe06a99

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page