Initial commit
This commit is contained in:
@@ -0,0 +1 @@
|
||||
/target
|
||||
Generated
+16
@@ -0,0 +1,16 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "card_game"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"deranged",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "deranged"
|
||||
version = "0.5.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
|
||||
@@ -0,0 +1,7 @@
|
||||
[package]
|
||||
name = "card_game"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
deranged = "0.5.8"
|
||||
@@ -0,0 +1 @@
|
||||
hard_tabs=true
|
||||
@@ -0,0 +1,39 @@
|
||||
// TODO: pub struct ValidInstruction<I>(I);
|
||||
pub trait Game {
|
||||
type Instruction;
|
||||
fn enumerate_instructions(&self) -> impl Iterator<Item = Self::Instruction>;
|
||||
fn validate_instruction(&self, instruction: Self::Instruction) -> bool;
|
||||
fn process_instruction(&mut self, instruction: Self::Instruction);
|
||||
}
|
||||
|
||||
pub struct Card(u8);
|
||||
pub struct CardValue(deranged::RangedU8<1, 13>);
|
||||
pub enum Suit {
|
||||
Spades,
|
||||
Hearts,
|
||||
Clubs,
|
||||
Diamonds,
|
||||
}
|
||||
|
||||
pub struct Stack(Vec<Card>);
|
||||
|
||||
pub struct Session<G: Game> {
|
||||
state: G,
|
||||
history: Vec<G::Instruction>,
|
||||
}
|
||||
impl<G: Game> Game for Session<G>
|
||||
where
|
||||
G::Instruction: Clone,
|
||||
{
|
||||
type Instruction = G::Instruction;
|
||||
fn enumerate_instructions(&self) -> impl Iterator<Item = Self::Instruction> {
|
||||
self.state.enumerate_instructions()
|
||||
}
|
||||
fn validate_instruction(&self, instruction: Self::Instruction) -> bool {
|
||||
self.state.validate_instruction(instruction)
|
||||
}
|
||||
fn process_instruction(&mut self, instruction: Self::Instruction) {
|
||||
self.history.push(instruction.clone());
|
||||
self.state.process_instruction(instruction);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
use crate::card_game::{Card, Game, Stack};
|
||||
|
||||
struct Pile {
|
||||
face_down: Stack,
|
||||
face_up: Stack,
|
||||
}
|
||||
struct KlondikeConfig {}
|
||||
struct KlondikeState {
|
||||
piles: [Pile; 14],
|
||||
}
|
||||
enum KlondikePileId {
|
||||
Stock,
|
||||
Hand,
|
||||
Foundation0,
|
||||
Foundation1,
|
||||
Foundation2,
|
||||
Foundation3,
|
||||
Tableau0,
|
||||
Tableau1,
|
||||
Tableau2,
|
||||
Tableau3,
|
||||
Tableau4,
|
||||
Tableau5,
|
||||
Tableau6,
|
||||
Tableau7,
|
||||
}
|
||||
struct KlondikeMove {
|
||||
src: KlondikePileId,
|
||||
dst: KlondikePileId,
|
||||
}
|
||||
pub struct KlondikeGame {
|
||||
config: KlondikeConfig,
|
||||
state: KlondikeState,
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
mod card_game;
|
||||
mod klondike;
|
||||
Reference in New Issue
Block a user