8 releases
0.4.0 | Feb 18, 2020 |
---|---|
0.3.5 | Jan 8, 2019 |
0.3.4 | Sep 12, 2016 |
0.3.3 | Jul 28, 2016 |
0.1.0 | Apr 3, 2016 |
#1353 in Game dev
44KB
1K
SLoC
Deck of Cards
This is a simple library implemented in Rust that models a deck of cards. You can use it to create a deck, shuffle it, deal cards one or multiple cards at a time.
Cargo import
You can use the module in the standard way by adding this to your Cargo.toml. Unless you have a reason not to, you should use the latest released version.
[dependencies]
deckofcards = "0.4"
API documentation
Once you've added a dependency you can get class documentation like so:
cargo doc
Usage
The Deck class contains zero or more Cards which are held in dealt or undealt piles. You can shuffle()
the deck.
You can deal_one()
card or deal_many()
cards. You can reset()
to return dealt cards to the undealt pile.
use deckofcards::*;
let mut deck = Deck::new();
By default if you don't shuffle, your deck will be sorted by suit then rank. You can shuffle the deck using a randomized Knuth shuffle:
deck.shuffle();
You can deal cards out to a Vec<Card>
:
let cards = deck.deal(5);
Or into the Hand
object which provides additional sorting and filtering.
let mut hand = Hand::new();
deck.deal(&mut hand, 3);
Each card has a Rank
and a Suit
, both of which are strong enum types.
Cards can be compared, sorted and have helpers to print a long and short description using English notation, e.g. "Ace of Spades" or "AS".
Macros
The crate provides convenience card!
and hand!
macros for declaring cards or hands as text:
#[macro_use]
extern crate deckofcards;
//... A Card that is the King of Clubs
let card = card!("KC");
//... A Hand that is Ace of Spades, 3 of Diamonds, Queen of Clubs
let hand = hand!("AS", "3D", "QC");
Example
There is an example for you see how it works in examples/main.rs
.
cargo run --example main
Tests
There are some 30 or so unit tests.
cargo test
Dependencies
~1.4–2MB
~36K SLoC