8个版本

0.4.0 2020年2月18日
0.3.5 2019年1月8日
0.3.4 2016年9月12日
0.3.3 2016年7月28日
0.1.0 2016年4月3日

#1170游戏开发

41 每月下载量

LGPL-2.1

44KB
1K SLoC

牌组

这是一个用Rust实现的简单库,用于模拟牌组。您可以使用它创建牌组,洗牌,一次或多次发牌。

Cargo导入

您可以通过将以下内容添加到您的Cargo.toml中以标准方式使用该模块。除非您有其他原因,否则您应该使用最新发布的版本。

[dependencies]
deckofcards = "0.4"

API文档

一旦添加了依赖项,您可以通过以下方式获取类文档

cargo doc

用法

Deck类包含零个或多个Card,这些Card被保存在已发牌或未发牌的堆中。您可以使用 shuffle() 洗牌。您可以使用 deal_one() 发一张牌或 deal_many() 多张牌。您可以使用 reset() 将已发牌返回到未发牌堆。

use deckofcards::*;

let mut deck = Deck::new();

默认情况下,如果您不洗牌,您的牌组将按花色排序,然后按等级排序。您可以使用随机化的Knuth洗牌算法来洗牌

deck.shuffle();

您可以将牌发到 Vec<Card>

let cards = deck.deal(5);

或到 Hand 对象,该对象提供额外的排序和过滤。

let mut hand = Hand::new();
deck.deal(&mut hand, 3);

每张牌都有一个 Rank 和一个 Suit,两者都是强枚举类型。

牌可以比较、排序,并具有使用英语符号打印长描述和短描述的辅助程序,例如“黑桃A”或“AS”。

该crate提供便利的 card!hand! 宏,用于将牌或手牌作为文本声明

#[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");

示例

examples/main.rs 中有一个示例,您可以查看它是如何工作的。

cargo run --example main

测试

有一些大约30个单元测试。

cargo test

依赖项

~525KB