Much work fleshing out cards and hands.
This commit is contained in:
100
src/card.rs
Normal file
100
src/card.rs
Normal file
@@ -0,0 +1,100 @@
|
||||
use rand::Rng;
|
||||
use std::fmt;
|
||||
|
||||
#[derive(Clone, Copy, Eq, PartialEq)]
|
||||
pub enum CardSuit {
|
||||
Diamonds,
|
||||
Clubs,
|
||||
Hearts,
|
||||
Spades,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, Eq, PartialEq, PartialOrd, Ord, Hash)]
|
||||
pub enum CardValue {
|
||||
Two = 2,
|
||||
Three,
|
||||
Four,
|
||||
Five,
|
||||
Six,
|
||||
Seven,
|
||||
Eight,
|
||||
Nine,
|
||||
Ten,
|
||||
Jack,
|
||||
Queen,
|
||||
King,
|
||||
Ace,
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Eq)]
|
||||
pub struct PlayingCard {
|
||||
pub value: CardValue,
|
||||
pub suit: CardSuit,
|
||||
}
|
||||
|
||||
impl Ord for PlayingCard {
|
||||
fn cmp(&self, other: &Self) -> std::cmp::Ordering {
|
||||
self.value.cmp(&other.value)
|
||||
}
|
||||
}
|
||||
|
||||
impl PartialOrd for PlayingCard {
|
||||
fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
|
||||
self.value.partial_cmp(&other.value)
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for PlayingCard {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
let suit = match self.suit {
|
||||
CardSuit::Clubs => "♣",
|
||||
CardSuit::Diamonds => "♦",
|
||||
CardSuit::Hearts => "♥",
|
||||
CardSuit::Spades => "♠",
|
||||
};
|
||||
|
||||
write!(f, "{:?}{}", self.value, suit)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn draw_card(deck: &mut Vec<PlayingCard>) -> PlayingCard {
|
||||
let num = rand::thread_rng().gen_range(0..deck.len());
|
||||
let card = deck.remove(num);
|
||||
|
||||
card
|
||||
}
|
||||
|
||||
pub fn create_deck() -> Vec<PlayingCard> {
|
||||
let mut deck: Vec<PlayingCard> = vec![];
|
||||
let suits = [
|
||||
CardSuit::Diamonds,
|
||||
CardSuit::Clubs,
|
||||
CardSuit::Hearts,
|
||||
CardSuit::Spades,
|
||||
];
|
||||
|
||||
let values = [
|
||||
CardValue::Two,
|
||||
CardValue::Three,
|
||||
CardValue::Four,
|
||||
CardValue::Five,
|
||||
CardValue::Six,
|
||||
CardValue::Seven,
|
||||
CardValue::Eight,
|
||||
CardValue::Nine,
|
||||
CardValue::Ten,
|
||||
CardValue::Jack,
|
||||
CardValue::Queen,
|
||||
CardValue::King,
|
||||
CardValue::Ace,
|
||||
];
|
||||
|
||||
for s in suits {
|
||||
for i in values {
|
||||
let card = PlayingCard { suit: s, value: i };
|
||||
deck.insert(0, card);
|
||||
}
|
||||
}
|
||||
|
||||
deck
|
||||
}
|
||||
Reference in New Issue
Block a user