diff options
author | Kjetil Orbekk <kj@orbekk.com> | 2022-09-04 20:16:07 -0400 |
---|---|---|
committer | Kjetil Orbekk <kj@orbekk.com> | 2022-09-04 20:16:07 -0400 |
commit | ac7f6618477e58783887ccc1779f0b86930f1773 (patch) | |
tree | 730b69a96481de3c96abe8828a7780343a3244b6 | |
parent | b66a92fcc6120781ad5bad06c29f57fa2c919a2c (diff) |
Introduce `Deal` for shuffled decks
-rw-r--r-- | webapp/src/bridge_engine.rs | 6 | ||||
-rw-r--r-- | webapp/src/card.rs | 20 | ||||
-rw-r--r-- | webapp/src/main.rs | 20 |
3 files changed, 27 insertions, 19 deletions
diff --git a/webapp/src/bridge_engine.rs b/webapp/src/bridge_engine.rs index 48c0fd2..873a2f0 100644 --- a/webapp/src/bridge_engine.rs +++ b/webapp/src/bridge_engine.rs @@ -1,4 +1,4 @@ -use crate::card; +use crate::card::Card; #[derive(PartialEq, Eq, Clone, Copy, Debug)] pub enum Player { @@ -22,7 +22,7 @@ impl Player { #[derive(PartialEq, Eq, Debug)] pub struct Trick { pub leader: Player, - pub cards_played: Vec<card::Card>, + pub cards_played: Vec<Card>, } #[derive(PartialEq, Eq, Debug)] @@ -46,7 +46,7 @@ impl Turn { } } - pub fn play(mut self: Turn, card: card::Card) -> PlayResult { + pub fn play(mut self: Turn, card: Card) -> PlayResult { self.in_progress.cards_played.push(card); if self.in_progress.cards_played.len() >= 4 { return PlayResult::Trick(self.in_progress); diff --git a/webapp/src/card.rs b/webapp/src/card.rs index 174676f..3b2fc24 100644 --- a/webapp/src/card.rs +++ b/webapp/src/card.rs @@ -184,16 +184,24 @@ mod tests { } } -pub fn shuffle_deck<R>(rng: &mut R) -> (Vec<Card>, Vec<Card>, Vec<Card>, Vec<Card>) +#[derive(Debug, PartialEq, Eq)] +pub struct Deal { + pub north: Vec<Card>, + pub west: Vec<Card>, + pub south: Vec<Card>, + pub east: Vec<Card>, +} + +pub fn deal<R>(rng: &mut R) -> Deal where R: Rng, { let mut deck = make_deck(); deck.shuffle(rng); let mut deck = deck.iter(); - let n = deck.by_ref().take(13).cloned().collect(); - let w = deck.by_ref().take(13).cloned().collect(); - let s = deck.by_ref().take(13).cloned().collect(); - let e = deck.by_ref().take(13).cloned().collect(); - (n, w, s, e) + let north = deck.by_ref().take(13).cloned().collect(); + let west = deck.by_ref().take(13).cloned().collect(); + let south = deck.by_ref().take(13).cloned().collect(); + let east = deck.by_ref().take(13).cloned().collect(); + Deal { north, west, south, east } } diff --git a/webapp/src/main.rs b/webapp/src/main.rs index 7f22b0f..4e61344 100644 --- a/webapp/src/main.rs +++ b/webapp/src/main.rs @@ -19,12 +19,12 @@ fn main() { #[function_component(App)] pub fn app() -> Html { let mut rng = rand::thread_rng(); - let (n, w, s, e) = card::shuffle_deck(&mut rng); + let deal = card::deal(&mut rng); - let north = use_state(|| HandProps::from_iter(n.into_iter())); - let west = use_state(|| HandProps::from_iter(w.into_iter())); - let south = use_state(|| HandProps::from_iter(s.into_iter())); - let east = use_state(|| HandProps::from_iter(e.into_iter())); + let north = use_state(|| HandProps::from_iter(deal.north.into_iter())); + let west = use_state(|| HandProps::from_iter(deal.west.into_iter())); + let south = use_state(|| HandProps::from_iter(deal.south.into_iter())); + let east = use_state(|| HandProps::from_iter(deal.east.into_iter())); let shuffle = { let north = north.clone(); @@ -34,11 +34,11 @@ pub fn app() -> Html { Callback::from(move |_| { let mut rng = rand::thread_rng(); - let (n, w, s, e) = card::shuffle_deck(&mut rng); - north.set(n.into_iter().collect()); - west.set(w.into_iter().collect()); - south.set(s.into_iter().collect()); - east.set(e.into_iter().collect()); + let deal = card::deal(&mut rng); + north.set(deal.north.into_iter().collect()); + west.set(deal.west.into_iter().collect()); + south.set(deal.south.into_iter().collect()); + east.set(deal.east.into_iter().collect()); }) }; |