separate klondike

This commit is contained in:
2026-05-16 16:55:58 -07:00
parent fe2530bfc8
commit 5ed4ec139f
10 changed files with 39 additions and 18 deletions
Generated
+9 -1
View File
@@ -25,7 +25,6 @@ name = "card_game"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"arrayvec", "arrayvec",
"rand",
] ]
[[package]] [[package]]
@@ -125,11 +124,20 @@ version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
[[package]]
name = "klondike"
version = "0.1.0"
dependencies = [
"card_game",
"rand",
]
[[package]] [[package]]
name = "klondike-cli" name = "klondike-cli"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"card_game", "card_game",
"klondike",
] ]
[[package]] [[package]]
+1
View File
@@ -1,6 +1,7 @@
[workspace] [workspace]
members = [ members = [
"card_game", "card_game",
"klondike",
"klondike-cli", "klondike-cli",
] ]
resolver = "3" resolver = "3"
-1
View File
@@ -10,4 +10,3 @@ keywords = ["card", "cards", "solitaire", "klondike"]
[dependencies] [dependencies]
arrayvec = "0.7.6" arrayvec = "0.7.6"
rand = { version = "0.10.1", default-features = false, features = ["thread_rng"] }
+2 -7
View File
@@ -1,10 +1,5 @@
pub mod card_game; mod card_game;
pub mod klondike; pub use card_game::*;
#[cfg(test)]
mod test;
pub type Rng = rand::rngs::ThreadRng;
// // test readme // // test readme
// #[doc = include_str!("../README.md")] // #[doc = include_str!("../README.md")]
+1
View File
@@ -5,3 +5,4 @@ edition = "2024"
[dependencies] [dependencies]
card_game = { version = "0.1.0", path = "../card_game" } card_game = { version = "0.1.0", path = "../card_game" }
klondike = { version = "0.1.0", path = "../klondike" }
+2 -2
View File
@@ -1,5 +1,5 @@
use card_game::card_game::{Card, Game, Pile, Session, Suit}; use card_game::{Card, Game, Pile, Session, Suit};
use card_game::klondike::{ use klondike::{
DstFoundation, DstTableau, Foundation, Klondike, KlondikeInstruction, KlondikePile, DstFoundation, DstTableau, Foundation, Klondike, KlondikeInstruction, KlondikePile,
KlondikePileStack, SkipCards, Tableau, TableauStack, KlondikePileStack, SkipCards, Tableau, TableauStack,
}; };
+8
View File
@@ -0,0 +1,8 @@
[package]
name = "klondike"
version = "0.1.0"
edition = "2024"
[dependencies]
card_game = { version = "0.1.0", path = "../card_game" }
rand = { version = "0.10.1", default-features = false, features = ["thread_rng"] }
@@ -1,5 +1,14 @@
use crate::Rng; pub type Rng = rand::rngs::ThreadRng;
use crate::card_game::{Card, CardValue, Game, Pile, Stack};
use card_game::{Card, CardValue, Game, Pile, Stack};
#[cfg(test)]
mod test;
// test readme
#[doc = include_str!("../README.md")]
#[cfg(doctest)]
struct ReadmeDoctests;
#[derive(Clone, Debug, Eq, Hash, PartialEq)] #[derive(Clone, Debug, Eq, Hash, PartialEq)]
pub struct KlondikeConfig {} pub struct KlondikeConfig {}
@@ -480,8 +489,8 @@ impl Klondike {
let mut deck = deck.into_iter(); let mut deck = deck.into_iter();
// generate tableaus // generate tableaus
fn pile<const DN: usize>(deck: &mut arrayvec::IntoIter<Card, 52>) -> Pile<DN, 13> { fn pile<const DN: usize>(deck: &mut <Stack<52> as IntoIterator>::IntoIter) -> Pile<DN, 13> {
let stack = arrayvec::ArrayVec::from_iter(deck.take(DN)).into(); let stack = Stack::from_iter(deck.take(DN));
let mut pile = Pile::new_face_down(stack); let mut pile = Pile::new_face_down(stack);
pile.push(deck.next().unwrap()); pile.push(deck.next().unwrap());
pile pile
@@ -495,7 +504,7 @@ impl Klondike {
let tableau7 = pile(&mut deck); let tableau7 = pile(&mut deck);
// stock is remaining cards // stock is remaining cards
let stock = Pile::new_face_down(arrayvec::ArrayVec::from_iter(deck).into()); let stock = Pile::new_face_down(Stack::from_iter(deck));
let state = KlondikeState { let state = KlondikeState {
stock, stock,
@@ -1,5 +1,5 @@
use crate::card_game::{Game, Session}; use crate::Klondike;
use crate::klondike::Klondike; use card_game::{Game, Session};
#[test] #[test]
fn test_is_winnable() { fn test_is_winnable() {
// is winnable // is winnable