summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetil Orbekk <kj@orbekk.com>2022-09-04 20:16:07 -0400
committerKjetil Orbekk <kj@orbekk.com>2022-09-04 20:16:07 -0400
commitac7f6618477e58783887ccc1779f0b86930f1773 (patch)
tree730b69a96481de3c96abe8828a7780343a3244b6
parentb66a92fcc6120781ad5bad06c29f57fa2c919a2c (diff)
Introduce `Deal` for shuffled decks
-rw-r--r--webapp/src/bridge_engine.rs6
-rw-r--r--webapp/src/card.rs20
-rw-r--r--webapp/src/main.rs20
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());
})
};