Deck Implementation #11

Merged
wesley merged 1 commits from feature/deck into development 2026-01-10 18:03:44 -05:00
4 changed files with 63 additions and 0 deletions
Showing only changes of commit 585fa31866 - Show all commits

View File

@@ -1,5 +1,6 @@
use std::fmt; use std::fmt;
#[derive(Debug, Clone, Copy)]
pub struct Card { pub struct Card {
pub suit: u8, pub suit: u8,
pub value: u8, pub value: u8,

View File

@@ -0,0 +1,41 @@
use super::card::Card;
pub struct Deck {
deck_size: u64,
current_card: u64,
cards: Vec<Card>,
}
impl Deck {
pub fn new(num_decks: u64) -> Self {
let deck_size: u64 = num_decks * 52;
let mut cards: Vec<Card> = Vec::new();
for card in 0..deck_size {
let value = (card % 13) as u8;
let suit = ((card / 13) % 4) as u8;
cards.push(Card {
value: value,
suit: suit,
});
}
Deck {
deck_size: deck_size,
current_card: 0,
cards: cards,
}
}
pub fn get_next_card(&mut self) -> Card {
let next_card = self.cards[self.current_card as usize];
self.current_card += 1;
next_card
}
pub fn deck_size(&self) -> usize {
self.deck_size as usize
}
}

View File

@@ -2,6 +2,9 @@ use std::error::Error;
mod card; mod card;
mod deck; mod deck;
pub use deck::Deck;
mod gamestate; mod gamestate;
mod hand; mod hand;

18
tests/deck_tests.rs Normal file
View File

@@ -0,0 +1,18 @@
use blackjack::Deck;
#[test]
fn check_num_decks() {
let mut num_card: [u64; 52] = [0; 52];
let num_decks = 8;
let mut deck = Deck::new(num_decks as u64);
for _ in 0..deck.deck_size() {
let next_card = deck.get_next_card();
let card_pos = next_card.suit * 13 + next_card.value;
num_card[card_pos as usize] += 1;
}
for card in 0..num_card.len() {
assert_eq!(num_card[card], num_decks);
}
}