score final pairs/runs correctly when a player plays his last card while other player...
authorGeoffrey Allott <geoffrey@allott.email>
Sun, 2 Jul 2023 21:48:12 +0000 (22:48 +0100)
committerGeoffrey Allott <geoffrey@allott.email>
Sun, 2 Jul 2023 21:48:12 +0000 (22:48 +0100)
src/game/cribbage/mod.rs

index bc3f2979d0ef4d92578ccc2f28462e5df16295c8..ca5efb7c42835a7d256fad963df30bf715c04e5f 100644 (file)
@@ -129,7 +129,7 @@ impl Cribbage {
             None => self.used_pegging_cards.last().map(|(username, _)| (*username, PeggingScore::one_for_a_go())),
             Some((username, _)) => {
                 let cards: Vec<_> = self.pegging_cards.iter().map(|(_, card)| *card).collect();
-                let score = score_pegging(&cards, self.all_hands_are_empty());
+                let score = score_pegging(&cards, self.next_player_still_in().is_none());
                 if score.points() > 0 {
                     Some((*username, score))
                 } else {
@@ -335,15 +335,12 @@ impl Game for Cribbage {
                     }
                 }
                 self.pegging_cards.push((username, card));
-                if self.last_pegging_score().is_some() {
+                if self.next_player_still_in().is_none() {
+                    self.state = State::ScoringPegging;
+                } else if self.last_pegging_score().is_some() {
                     self.state = State::ScoringPegging;
                 } else {
-                    if self.next_player_still_in().is_none() {
-                        self.used_pegging_cards.append(&mut self.pegging_cards);
-                        self.state = State::ScoringPegging;
-                    } else {
-                        self.active = self.next_player_still_in();
-                    }
+                    self.active = self.next_player_still_in();
                 }
                 Ok(())
             }
@@ -2207,7 +2204,7 @@ mod tests {
             {"timestamp":1686172971961,"username":"Aga","action":{"action":"Pass"}},
             {"timestamp":1686172974106,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Ace","suit":"Diamonds"}}},
             {"timestamp":1686173011382,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Ace","suit":"Spades"}}},
-            {"timestamp":1686173011383,"username":"Geoff","action":{"action":"Score","points":2,"reason":"A pair"}},
+            {"timestamp":1686173011383,"username":"Geoff","action":{"action":"Score","points":3,"reason":"A pair and a go is three"}},
             {"timestamp":1686173015507,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Ten","suit":"Hearts"}}},
             {"timestamp":1686173016640,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Ten","suit":"Clubs"}}},
             {"timestamp":1686173016641,"username":"Aga","action":{"action":"Score","points":3,"reason":"A pair and a go is three"}},
@@ -3121,4 +3118,457 @@ mod tests {
 
         test_game(actions, settings, seed);
     }
+
+    #[test]
+    fn score_on_last_to_act() {
+        let actions = r#"[
+            {"timestamp":1688333332338,"username":"Geoff","action":{"action":"Join","seat":0,"chips":0}},
+            {"timestamp":1688333349707,"username":"Aga","action":{"action":"Join","seat":1,"chips":0}},
+            {"timestamp":1688333362768,"username":"Aga","action":{"action":"NextToDeal"}},
+            {"timestamp":1688333362769,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"King","suit":"Clubs"}}},
+            {"timestamp":1688333362769,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Six","suit":"Hearts"}}},
+            {"timestamp":1688333362770,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Four","suit":"Hearts"}}},
+            {"timestamp":1688333362770,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Seven","suit":"Hearts"}}},
+            {"timestamp":1688333362771,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Ace","suit":"Hearts"}}},
+            {"timestamp":1688333362771,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"King","suit":"Diamonds"}}},
+            {"timestamp":1688333362772,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Four","suit":"Clubs"}}},
+            {"timestamp":1688333362772,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Four","suit":"Spades"}}},
+            {"timestamp":1688333362772,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Three","suit":"Diamonds"}}},
+            {"timestamp":1688333362773,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Ace","suit":"Clubs"}}},
+            {"timestamp":1688333362773,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Seven","suit":"Diamonds"}}},
+            {"timestamp":1688333362774,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Jack","suit":"Hearts"}}},
+            {"timestamp":1688333362774,"username":"Aga","action":{"action":"EndDeal"}},
+            {"timestamp":1688333381170,"username":"Geoff","action":{"action":"PutInBox","card":{"rank":"King","suit":"Clubs"}}},
+            {"timestamp":1688333384488,"username":"Geoff","action":{"action":"PutInBox","card":{"rank":"Seven","suit":"Diamonds"}}},
+            {"timestamp":1688333388443,"username":"Aga","action":{"action":"PutInBox","card":{"rank":"Ace","suit":"Clubs"}}},
+            {"timestamp":1688333389746,"username":"Aga","action":{"action":"PutInBox","card":{"rank":"Four","suit":"Spades"}}},
+            {"timestamp":1688333389747,"username":"Aga","action":{"action":"CommunityCard","card":{"rank":"Nine","suit":"Clubs"}}},
+            {"timestamp":1688333409646,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Four","suit":"Hearts"}}},
+            {"timestamp":1688333410747,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Jack","suit":"Hearts"}}},
+            {"timestamp":1688333414990,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Four","suit":"Clubs"}}},
+            {"timestamp":1688333420322,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"King","suit":"Diamonds"}}},
+            {"timestamp":1688333425703,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Ace","suit":"Hearts"}}},
+            {"timestamp":1688333427738,"username":"Aga","action":{"action":"Pass"}},
+            {"timestamp":1688333429549,"username":"Geoff","action":{"action":"Pass"}},
+            {"timestamp":1688333429550,"username":"Geoff","action":{"action":"Score","points":1,"reason":"One for a go"}},
+            {"timestamp":1688333431418,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Seven","suit":"Hearts"}}},
+            {"timestamp":1688333433803,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Three","suit":"Diamonds"}}},
+            {"timestamp":1688333434813,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Six","suit":"Hearts"}}},
+            {"timestamp":1688333434814,"username":"Aga","action":{"action":"Score","points":1,"reason":"One for a go"}},
+            {"timestamp":1688333434814,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Three","suit":"Diamonds"}}},
+            {"timestamp":1688333434815,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Four","suit":"Clubs"}}},
+            {"timestamp":1688333434815,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Four","suit":"Hearts"}}},
+            {"timestamp":1688333434816,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Ace","suit":"Hearts"}}},
+            {"timestamp":1688333434816,"username":"Geoff","action":{"action":"Score","points":2,"reason":"A pair"}},
+            {"timestamp":1688333434817,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Six","suit":"Hearts"}}},
+            {"timestamp":1688333434817,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Seven","suit":"Hearts"}}},
+            {"timestamp":1688333434817,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Jack","suit":"Hearts"}}},
+            {"timestamp":1688333434818,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"King","suit":"Diamonds"}}},
+            {"timestamp":1688333434818,"username":"Aga","action":{"action":"Score","points":2,"reason":"Fifteen two, and the rest won't do"}},
+            {"timestamp":1688333434819,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Four","suit":"Spades"}}},
+            {"timestamp":1688333434819,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Seven","suit":"Diamonds"}}},
+            {"timestamp":1688333434819,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"King","suit":"Clubs"}}},
+            {"timestamp":1688333434820,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Ace","suit":"Clubs"}}},
+            {"timestamp":1688333434821,"username":"Aga","action":{"action":"Score","points":2,"reason":"Fifteen two, and the rest won't do"}},
+            {"timestamp":1688333434821,"username":"Geoff","action":{"action":"NextToDeal"}},
+            {"timestamp":1688333434822,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Five","suit":"Diamonds"}}},
+            {"timestamp":1688333434822,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Ten","suit":"Hearts"}}},
+            {"timestamp":1688333434822,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Jack","suit":"Clubs"}}},
+            {"timestamp":1688333434823,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Ten","suit":"Clubs"}}},
+            {"timestamp":1688333434824,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Two","suit":"Hearts"}}},
+            {"timestamp":1688333434824,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Ten","suit":"Diamonds"}}},
+            {"timestamp":1688333434825,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Four","suit":"Diamonds"}}},
+            {"timestamp":1688333434825,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Two","suit":"Clubs"}}},
+            {"timestamp":1688333434825,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Nine","suit":"Diamonds"}}},
+            {"timestamp":1688333434826,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Five","suit":"Spades"}}},
+            {"timestamp":1688333434830,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Nine","suit":"Hearts"}}},
+            {"timestamp":1688333434831,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Six","suit":"Hearts"}}},
+            {"timestamp":1688333434831,"username":"Geoff","action":{"action":"EndDeal"}},
+            {"timestamp":1688333451712,"username":"Geoff","action":{"action":"PutInBox","card":{"rank":"Two","suit":"Clubs"}}},
+            {"timestamp":1688333452456,"username":"Geoff","action":{"action":"PutInBox","card":{"rank":"Six","suit":"Hearts"}}},
+            {"timestamp":1688333455674,"username":"Aga","action":{"action":"PutInBox","card":{"rank":"Nine","suit":"Hearts"}}},
+            {"timestamp":1688333456433,"username":"Aga","action":{"action":"PutInBox","card":{"rank":"Jack","suit":"Clubs"}}},
+            {"timestamp":1688333456434,"username":"Geoff","action":{"action":"CommunityCard","card":{"rank":"Eight","suit":"Clubs"}}},
+            {"timestamp":1688333458685,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Nine","suit":"Diamonds"}}},
+            {"timestamp":1688333462140,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Ten","suit":"Diamonds"}}},
+            {"timestamp":1688333464173,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Five","suit":"Diamonds"}}},
+            {"timestamp":1688333470229,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Five","suit":"Spades"}}},
+            {"timestamp":1688333470230,"username":"Geoff","action":{"action":"Score","points":2,"reason":"A pair"}},
+            {"timestamp":1688333476528,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Two","suit":"Hearts"}}},
+            {"timestamp":1688333476529,"username":"Aga","action":{"action":"Score","points":2,"reason":"Thirty-one for two"}},
+            {"timestamp":1688333480130,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Ten","suit":"Clubs"}}},
+            {"timestamp":1688333481132,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Four","suit":"Diamonds"}}},
+            {"timestamp":1688333481933,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Ten","suit":"Hearts"}}},
+            {"timestamp":1688333481934,"username":"Geoff","action":{"action":"Score","points":1,"reason":"One for a go"}},
+            {"timestamp":1688333481935,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Two","suit":"Hearts"}}},
+            {"timestamp":1688333481936,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Four","suit":"Diamonds"}}},
+            {"timestamp":1688333481936,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Five","suit":"Diamonds"}}},
+            {"timestamp":1688333481937,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Nine","suit":"Diamonds"}}},
+            {"timestamp":1688333481938,"username":"Aga","action":{"action":"Score","points":4,"reason":"Fifteen two, fifteen four, look all day, see no more"}},
+            {"timestamp":1688333481938,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Five","suit":"Spades"}}},
+            {"timestamp":1688333481939,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Ten","suit":"Clubs"}}},
+            {"timestamp":1688333481939,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Ten","suit":"Diamonds"}}},
+            {"timestamp":1688333481940,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Ten","suit":"Hearts"}}},
+            {"timestamp":1688333481941,"username":"Geoff","action":{"action":"Score","points":12,"reason":"Fifteen two, fifteen four, fifteen six and three-of-a-kind for six is 12"}},
+            {"timestamp":1688333481941,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Two","suit":"Clubs"}}},
+            {"timestamp":1688333481942,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Six","suit":"Hearts"}}},
+            {"timestamp":1688333481942,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Nine","suit":"Hearts"}}},
+            {"timestamp":1688333481943,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Jack","suit":"Clubs"}}},
+            {"timestamp":1688333481943,"username":"Geoff","action":{"action":"Score","points":3,"reason":"Fifteen two and one for his nob is 3"}},
+            {"timestamp":1688333481944,"username":"Aga","action":{"action":"NextToDeal"}},
+            {"timestamp":1688333481944,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Eight","suit":"Clubs"}}},
+            {"timestamp":1688333481945,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Queen","suit":"Spades"}}},
+            {"timestamp":1688333481945,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Seven","suit":"Hearts"}}},
+            {"timestamp":1688333481946,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"King","suit":"Clubs"}}},
+            {"timestamp":1688333481958,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Ace","suit":"Hearts"}}},
+            {"timestamp":1688333481958,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Ten","suit":"Hearts"}}},
+            {"timestamp":1688333481959,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Nine","suit":"Clubs"}}},
+            {"timestamp":1688333481960,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Five","suit":"Diamonds"}}},
+            {"timestamp":1688333481960,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"King","suit":"Hearts"}}},
+            {"timestamp":1688333481961,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Ten","suit":"Clubs"}}},
+            {"timestamp":1688333481961,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Seven","suit":"Diamonds"}}},
+            {"timestamp":1688333481962,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Four","suit":"Hearts"}}},
+            {"timestamp":1688333481962,"username":"Aga","action":{"action":"EndDeal"}},
+            {"timestamp":1688333493318,"username":"Aga","action":{"action":"PutInBox","card":{"rank":"Four","suit":"Hearts"}}},
+            {"timestamp":1688333493903,"username":"Aga","action":{"action":"PutInBox","card":{"rank":"Five","suit":"Diamonds"}}},
+            {"timestamp":1688333497048,"username":"Geoff","action":{"action":"PutInBox","card":{"rank":"King","suit":"Hearts"}}},
+            {"timestamp":1688333498499,"username":"Geoff","action":{"action":"PutInBox","card":{"rank":"Nine","suit":"Clubs"}}},
+            {"timestamp":1688333498500,"username":"Aga","action":{"action":"CommunityCard","card":{"rank":"Two","suit":"Spades"}}},
+            {"timestamp":1688333502055,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Seven","suit":"Hearts"}}},
+            {"timestamp":1688333503344,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Ten","suit":"Clubs"}}},
+            {"timestamp":1688333507208,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Eight","suit":"Clubs"}}},
+            {"timestamp":1688333509309,"username":"Aga","action":{"action":"Pass"}},
+            {"timestamp":1688333514156,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Ace","suit":"Hearts"}}},
+            {"timestamp":1688333515712,"username":"Geoff","action":{"action":"Pass"}},
+            {"timestamp":1688333515713,"username":"Geoff","action":{"action":"Score","points":1,"reason":"One for a go"}},
+            {"timestamp":1688333518110,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Ten","suit":"Hearts"}}},
+            {"timestamp":1688333520737,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Seven","suit":"Diamonds"}}},
+            {"timestamp":1688333522479,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"King","suit":"Clubs"}}},
+            {"timestamp":1688333524073,"username":"Aga","action":{"action":"Pass"}},
+            {"timestamp":1688333524074,"username":"Aga","action":{"action":"Score","points":1,"reason":"One for a go"}},
+            {"timestamp":1688333524874,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Queen","suit":"Spades"}}},
+            {"timestamp":1688333524876,"username":"Aga","action":{"action":"Score","points":1,"reason":"One for a go"}},
+            {"timestamp":1688333524876,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Seven","suit":"Diamonds"}}},
+            {"timestamp":1688333524877,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Seven","suit":"Hearts"}}},
+            {"timestamp":1688333524877,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Eight","suit":"Clubs"}}},
+            {"timestamp":1688333524878,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Ace","suit":"Hearts"}}},
+            {"timestamp":1688333524878,"username":"Geoff","action":{"action":"Score","points":8,"reason":"Fifteen two, fifteen four, fifteen six and a pair is 8"}},
+            {"timestamp":1688333524879,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Ten","suit":"Clubs"}}},
+            {"timestamp":1688333524880,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Ten","suit":"Hearts"}}},
+            {"timestamp":1688333524880,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Queen","suit":"Spades"}}},
+            {"timestamp":1688333524881,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"King","suit":"Clubs"}}},
+            {"timestamp":1688333524882,"username":"Aga","action":{"action":"Score","points":2,"reason":"A pair"}},
+            {"timestamp":1688333524882,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Four","suit":"Hearts"}}},
+            {"timestamp":1688333524883,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Five","suit":"Diamonds"}}},
+            {"timestamp":1688333524883,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Nine","suit":"Clubs"}}},
+            {"timestamp":1688333524884,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"King","suit":"Hearts"}}},
+            {"timestamp":1688333524884,"username":"Aga","action":{"action":"Score","points":4,"reason":"Fifteen two, fifteen four, look all day, see no more"}},
+            {"timestamp":1688333524885,"username":"Geoff","action":{"action":"NextToDeal"}},
+            {"timestamp":1688333524885,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Five","suit":"Hearts"}}},
+            {"timestamp":1688333524886,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Ten","suit":"Hearts"}}},
+            {"timestamp":1688333524886,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Five","suit":"Diamonds"}}},
+            {"timestamp":1688333524887,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Nine","suit":"Hearts"}}},
+            {"timestamp":1688333524887,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Three","suit":"Clubs"}}},
+            {"timestamp":1688333524888,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Three","suit":"Hearts"}}},
+            {"timestamp":1688333524898,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Queen","suit":"Hearts"}}},
+            {"timestamp":1688333524899,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Jack","suit":"Diamonds"}}},
+            {"timestamp":1688333524900,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Four","suit":"Spades"}}},
+            {"timestamp":1688333524900,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Four","suit":"Clubs"}}},
+            {"timestamp":1688333524901,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Eight","suit":"Diamonds"}}},
+            {"timestamp":1688333524901,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Four","suit":"Hearts"}}},
+            {"timestamp":1688333524902,"username":"Geoff","action":{"action":"EndDeal"}},
+            {"timestamp":1688333538695,"username":"Geoff","action":{"action":"PutInBox","card":{"rank":"Jack","suit":"Diamonds"}}},
+            {"timestamp":1688333539913,"username":"Geoff","action":{"action":"PutInBox","card":{"rank":"Ten","suit":"Hearts"}}},
+            {"timestamp":1688333543267,"username":"Aga","action":{"action":"PutInBox","card":{"rank":"Queen","suit":"Hearts"}}},
+            {"timestamp":1688333545545,"username":"Aga","action":{"action":"PutInBox","card":{"rank":"Eight","suit":"Diamonds"}}},
+            {"timestamp":1688333545546,"username":"Geoff","action":{"action":"CommunityCard","card":{"rank":"Three","suit":"Diamonds"}}},
+            {"timestamp":1688333548817,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Five","suit":"Hearts"}}},
+            {"timestamp":1688333551618,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Nine","suit":"Hearts"}}},
+            {"timestamp":1688333552909,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Four","suit":"Spades"}}},
+            {"timestamp":1688333555370,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Four","suit":"Hearts"}}},
+            {"timestamp":1688333555371,"username":"Geoff","action":{"action":"Score","points":2,"reason":"A pair"}},
+            {"timestamp":1688333557939,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Five","suit":"Diamonds"}}},
+            {"timestamp":1688333560633,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Four","suit":"Clubs"}}},
+            {"timestamp":1688333560634,"username":"Geoff","action":{"action":"Score","points":2,"reason":"Thirty-one for two"}},
+            {"timestamp":1688333563686,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Three","suit":"Clubs"}}},
+            {"timestamp":1688333564946,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Three","suit":"Hearts"}}},
+            {"timestamp":1688333564947,"username":"Geoff","action":{"action":"Score","points":3,"reason":"A pair and a go is three"}},
+            {"timestamp":1688333564947,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Three","suit":"Clubs"}}},
+            {"timestamp":1688333564948,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Four","suit":"Spades"}}},
+            {"timestamp":1688333564948,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Five","suit":"Diamonds"}}},
+            {"timestamp":1688333564948,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Five","suit":"Hearts"}}},
+            {"timestamp":1688333564949,"username":"Aga","action":{"action":"Score","points":20,"reason":"Fifteen two, fifteen four and a quadruple-run for sixteen is 20"}},
+            {"timestamp":1688333564949,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Three","suit":"Hearts"}}},
+            {"timestamp":1688333564950,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Four","suit":"Clubs"}}},
+            {"timestamp":1688333564951,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Four","suit":"Hearts"}}},
+            {"timestamp":1688333564951,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Nine","suit":"Hearts"}}},
+            {"timestamp":1688333564952,"username":"Geoff","action":{"action":"Score","points":6,"reason":"Fifteen two and two pairs is 6"}},
+            {"timestamp":1688333564952,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Eight","suit":"Diamonds"}}},
+            {"timestamp":1688333564953,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Ten","suit":"Hearts"}}},
+            {"timestamp":1688333564953,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Jack","suit":"Diamonds"}}},
+            {"timestamp":1688333564954,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Queen","suit":"Hearts"}}},
+            {"timestamp":1688333564955,"username":"Geoff","action":{"action":"Score","points":4,"reason":"A run of three and one for his nob is 4"}},
+            {"timestamp":1688333564955,"username":"Aga","action":{"action":"NextToDeal"}},
+            {"timestamp":1688333564956,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Eight","suit":"Hearts"}}},
+            {"timestamp":1688333564956,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Nine","suit":"Diamonds"}}},
+            {"timestamp":1688333564957,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Queen","suit":"Diamonds"}}},
+            {"timestamp":1688333564957,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Jack","suit":"Spades"}}},
+            {"timestamp":1688333564958,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Three","suit":"Spades"}}},
+            {"timestamp":1688333564959,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Five","suit":"Spades"}}},
+            {"timestamp":1688333564959,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Ace","suit":"Diamonds"}}},
+            {"timestamp":1688333564970,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Three","suit":"Clubs"}}},
+            {"timestamp":1688333564970,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Queen","suit":"Hearts"}}},
+            {"timestamp":1688333564971,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Three","suit":"Diamonds"}}},
+            {"timestamp":1688333564971,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"King","suit":"Diamonds"}}},
+            {"timestamp":1688333564972,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Four","suit":"Diamonds"}}},
+            {"timestamp":1688333564972,"username":"Aga","action":{"action":"EndDeal"}},
+            {"timestamp":1688333577098,"username":"Aga","action":{"action":"PutInBox","card":{"rank":"Jack","suit":"Spades"}}},
+            {"timestamp":1688333577642,"username":"Aga","action":{"action":"PutInBox","card":{"rank":"Nine","suit":"Diamonds"}}},
+            {"timestamp":1688333580702,"username":"Geoff","action":{"action":"PutInBox","card":{"rank":"Three","suit":"Spades"}}},
+            {"timestamp":1688333581245,"username":"Geoff","action":{"action":"PutInBox","card":{"rank":"Ace","suit":"Diamonds"}}},
+            {"timestamp":1688333581246,"username":"Aga","action":{"action":"CommunityCard","card":{"rank":"Seven","suit":"Hearts"}}},
+            {"timestamp":1688333583539,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"King","suit":"Diamonds"}}},
+            {"timestamp":1688333584949,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Four","suit":"Diamonds"}}},
+            {"timestamp":1688333586492,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Queen","suit":"Hearts"}}},
+            {"timestamp":1688333588325,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Five","suit":"Spades"}}},
+            {"timestamp":1688333589411,"username":"Geoff","action":{"action":"Pass"}},
+            {"timestamp":1688333591410,"username":"Aga","action":{"action":"Pass"}},
+            {"timestamp":1688333591411,"username":"Aga","action":{"action":"Score","points":1,"reason":"One for a go"}},
+            {"timestamp":1688333593273,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Queen","suit":"Diamonds"}}},
+            {"timestamp":1688333595678,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Three","suit":"Diamonds"}}},
+            {"timestamp":1688333596685,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Eight","suit":"Hearts"}}},
+            {"timestamp":1688333597602,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Three","suit":"Clubs"}}},
+            {"timestamp":1688333597603,"username":"Aga","action":{"action":"Score","points":1,"reason":"One for a go"}},
+            {"timestamp":1688333597603,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Eight","suit":"Hearts"}}},
+            {"timestamp":1688333597604,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Queen","suit":"Diamonds"}}},
+            {"timestamp":1688333597604,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Queen","suit":"Hearts"}}},
+            {"timestamp":1688333597605,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"King","suit":"Diamonds"}}},
+            {"timestamp":1688333597605,"username":"Geoff","action":{"action":"Score","points":4,"reason":"Fifteen two and a pair is 4"}},
+            {"timestamp":1688333597606,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Three","suit":"Clubs"}}},
+            {"timestamp":1688333597606,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Three","suit":"Diamonds"}}},
+            {"timestamp":1688333597607,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Four","suit":"Diamonds"}}},
+            {"timestamp":1688333597607,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Five","suit":"Spades"}}},
+            {"timestamp":1688333597608,"username":"Aga","action":{"action":"Score","points":14,"reason":"Fifteen two, fifteen four, fifteen six and a double-run for eight is 14"}},
+            {"timestamp":1688333597608,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Three","suit":"Spades"}}},
+            {"timestamp":1688333597609,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Nine","suit":"Diamonds"}}},
+            {"timestamp":1688333597610,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Jack","suit":"Spades"}}},
+            {"timestamp":1688333597610,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Ace","suit":"Diamonds"}}},
+            {"timestamp":1688333597611,"username":"Aga","action":{"action":"Score","points":0,"reason":"Nineteen"}},
+            {"timestamp":1688333597611,"username":"Geoff","action":{"action":"NextToDeal"}},
+            {"timestamp":1688333597612,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"King","suit":"Hearts"}}},
+            {"timestamp":1688333597612,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Ace","suit":"Spades"}}},
+            {"timestamp":1688333597613,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Four","suit":"Clubs"}}},
+            {"timestamp":1688333597613,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Queen","suit":"Hearts"}}},
+            {"timestamp":1688333597614,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Seven","suit":"Spades"}}},
+            {"timestamp":1688333597614,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Three","suit":"Spades"}}},
+            {"timestamp":1688333597615,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Seven","suit":"Clubs"}}},
+            {"timestamp":1688333597615,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Queen","suit":"Diamonds"}}},
+            {"timestamp":1688333597628,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Ace","suit":"Clubs"}}},
+            {"timestamp":1688333597629,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Six","suit":"Spades"}}},
+            {"timestamp":1688333597630,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Five","suit":"Hearts"}}},
+            {"timestamp":1688333597630,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Ace","suit":"Hearts"}}},
+            {"timestamp":1688333597631,"username":"Geoff","action":{"action":"EndDeal"}},
+            {"timestamp":1688333610304,"username":"Geoff","action":{"action":"PutInBox","card":{"rank":"Queen","suit":"Diamonds"}}},
+            {"timestamp":1688333610907,"username":"Geoff","action":{"action":"PutInBox","card":{"rank":"Queen","suit":"Hearts"}}},
+            {"timestamp":1688333614502,"username":"Aga","action":{"action":"PutInBox","card":{"rank":"Ace","suit":"Clubs"}}},
+            {"timestamp":1688333615469,"username":"Aga","action":{"action":"PutInBox","card":{"rank":"Four","suit":"Clubs"}}},
+            {"timestamp":1688333615470,"username":"Geoff","action":{"action":"CommunityCard","card":{"rank":"Five","suit":"Clubs"}}},
+            {"timestamp":1688333617016,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"King","suit":"Hearts"}}},
+            {"timestamp":1688333618788,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Six","suit":"Spades"}}},
+            {"timestamp":1688333620167,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Seven","suit":"Clubs"}}},
+            {"timestamp":1688333621724,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Three","suit":"Spades"}}},
+            {"timestamp":1688333627766,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Five","suit":"Hearts"}}},
+            {"timestamp":1688333627767,"username":"Aga","action":{"action":"Score","points":2,"reason":"Thirty-one for two"}},
+            {"timestamp":1688333636190,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Ace","suit":"Spades"}}},
+            {"timestamp":1688333637065,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Seven","suit":"Spades"}}},
+            {"timestamp":1688333637874,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Ace","suit":"Hearts"}}},
+            {"timestamp":1688333637875,"username":"Geoff","action":{"action":"Score","points":1,"reason":"One for a go"}},
+            {"timestamp":1688333637875,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Five","suit":"Hearts"}}},
+            {"timestamp":1688333637876,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Seven","suit":"Clubs"}}},
+            {"timestamp":1688333637876,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Seven","suit":"Spades"}}},
+            {"timestamp":1688333637877,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"King","suit":"Hearts"}}},
+            {"timestamp":1688333637877,"username":"Aga","action":{"action":"Score","points":8,"reason":"Fifteen two, fifteen four and two pairs is 8"}},
+            {"timestamp":1688333637878,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Three","suit":"Spades"}}},
+            {"timestamp":1688333637879,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Six","suit":"Spades"}}},
+            {"timestamp":1688333637879,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Ace","suit":"Hearts"}}},
+            {"timestamp":1688333637880,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Ace","suit":"Spades"}}},
+            {"timestamp":1688333637880,"username":"Geoff","action":{"action":"Score","points":6,"reason":"Fifteen two, fifteen four and a pair is 6"}},
+            {"timestamp":1688333637881,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Four","suit":"Clubs"}}},
+            {"timestamp":1688333637881,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Queen","suit":"Diamonds"}}},
+            {"timestamp":1688333637882,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Queen","suit":"Hearts"}}},
+            {"timestamp":1688333637883,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Ace","suit":"Clubs"}}},
+            {"timestamp":1688333637883,"username":"Geoff","action":{"action":"Score","points":10,"reason":"Fifteen two, fifteen four, fifteen six, fifteen eight and a pair is 10"}},
+            {"timestamp":1688333637884,"username":"Aga","action":{"action":"NextToDeal"}},
+            {"timestamp":1688333637885,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Two","suit":"Spades"}}},
+            {"timestamp":1688333637885,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"King","suit":"Hearts"}}},
+            {"timestamp":1688333637886,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Four","suit":"Hearts"}}},
+            {"timestamp":1688333637887,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Ace","suit":"Hearts"}}},
+            {"timestamp":1688333637887,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Four","suit":"Spades"}}},
+            {"timestamp":1688333637888,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Jack","suit":"Clubs"}}},
+            {"timestamp":1688333637898,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Five","suit":"Diamonds"}}},
+            {"timestamp":1688333637899,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Jack","suit":"Diamonds"}}},
+            {"timestamp":1688333637899,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Three","suit":"Spades"}}},
+            {"timestamp":1688333637900,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Eight","suit":"Hearts"}}},
+            {"timestamp":1688333637900,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Nine","suit":"Clubs"}}},
+            {"timestamp":1688333637901,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Three","suit":"Hearts"}}},
+            {"timestamp":1688333637901,"username":"Aga","action":{"action":"EndDeal"}},
+            {"timestamp":1688333647008,"username":"Aga","action":{"action":"PutInBox","card":{"rank":"Ace","suit":"Hearts"}}},
+            {"timestamp":1688333648045,"username":"Aga","action":{"action":"PutInBox","card":{"rank":"Three","suit":"Hearts"}}},
+            {"timestamp":1688333652813,"username":"Geoff","action":{"action":"PutInBox","card":{"rank":"Five","suit":"Diamonds"}}},
+            {"timestamp":1688333653441,"username":"Geoff","action":{"action":"PutInBox","card":{"rank":"Nine","suit":"Clubs"}}},
+            {"timestamp":1688333653442,"username":"Aga","action":{"action":"CommunityCard","card":{"rank":"Five","suit":"Clubs"}}},
+            {"timestamp":1688333655716,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Four","suit":"Spades"}}},
+            {"timestamp":1688333656634,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Jack","suit":"Diamonds"}}},
+            {"timestamp":1688333657934,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Four","suit":"Hearts"}}},
+            {"timestamp":1688333659429,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"King","suit":"Hearts"}}},
+            {"timestamp":1688333660970,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Three","suit":"Spades"}}},
+            {"timestamp":1688333660971,"username":"Geoff","action":{"action":"Score","points":2,"reason":"Thirty-one for two"}},
+            {"timestamp":1688333669938,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Eight","suit":"Hearts"}}},
+            {"timestamp":1688333671195,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Two","suit":"Spades"}}},
+            {"timestamp":1688333671983,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Jack","suit":"Clubs"}}},
+            {"timestamp":1688333671984,"username":"Aga","action":{"action":"Score","points":1,"reason":"One for a go"}},
+            {"timestamp":1688333671985,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Two","suit":"Spades"}}},
+            {"timestamp":1688333671985,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Three","suit":"Spades"}}},
+            {"timestamp":1688333671986,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Four","suit":"Hearts"}}},
+            {"timestamp":1688333671986,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Four","suit":"Spades"}}},
+            {"timestamp":1688333671986,"username":"Geoff","action":{"action":"Score","points":12,"reason":"Fifteen two and a double-run for ten is 12"}},
+            {"timestamp":1688333671987,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Eight","suit":"Hearts"}}},
+            {"timestamp":1688333671987,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Jack","suit":"Clubs"}}},
+            {"timestamp":1688333671988,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Jack","suit":"Diamonds"}}},
+            {"timestamp":1688333671988,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"King","suit":"Hearts"}}},
+            {"timestamp":1688333671989,"username":"Aga","action":{"action":"Score","points":9,"reason":"Fifteen two, fifteen four, fifteen six and a pair and one for his nob is 9"}},
+            {"timestamp":1688333671989,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Three","suit":"Hearts"}}},
+            {"timestamp":1688333671990,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Five","suit":"Diamonds"}}},
+            {"timestamp":1688333671990,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Nine","suit":"Clubs"}}},
+            {"timestamp":1688333671991,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Ace","suit":"Hearts"}}},
+            {"timestamp":1688333671991,"username":"Aga","action":{"action":"Score","points":6,"reason":"Fifteen two, fifteen four and a pair is 6"}},
+            {"timestamp":1688333671992,"username":"Geoff","action":{"action":"NextToDeal"}},
+            {"timestamp":1688333671992,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Ten","suit":"Clubs"}}},
+            {"timestamp":1688333671993,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Three","suit":"Spades"}}},
+            {"timestamp":1688333671993,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Ten","suit":"Hearts"}}},
+            {"timestamp":1688333671994,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Nine","suit":"Spades"}}},
+            {"timestamp":1688333671994,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Ace","suit":"Spades"}}},
+            {"timestamp":1688333671995,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Queen","suit":"Clubs"}}},
+            {"timestamp":1688333671995,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Ten","suit":"Spades"}}},
+            {"timestamp":1688333671996,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Queen","suit":"Hearts"}}},
+            {"timestamp":1688333671997,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Five","suit":"Hearts"}}},
+            {"timestamp":1688333672010,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Seven","suit":"Clubs"}}},
+            {"timestamp":1688333672011,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"King","suit":"Clubs"}}},
+            {"timestamp":1688333672011,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Seven","suit":"Hearts"}}},
+            {"timestamp":1688333672012,"username":"Geoff","action":{"action":"EndDeal"}},
+            {"timestamp":1688333683229,"username":"Aga","action":{"action":"PutInBox","card":{"rank":"King","suit":"Clubs"}}},
+            {"timestamp":1688333684523,"username":"Aga","action":{"action":"PutInBox","card":{"rank":"Ten","suit":"Spades"}}},
+            {"timestamp":1688333687749,"username":"Geoff","action":{"action":"PutInBox","card":{"rank":"Queen","suit":"Clubs"}}},
+            {"timestamp":1688333688218,"username":"Geoff","action":{"action":"PutInBox","card":{"rank":"Queen","suit":"Hearts"}}},
+            {"timestamp":1688333688219,"username":"Geoff","action":{"action":"CommunityCard","card":{"rank":"Five","suit":"Diamonds"}}},
+            {"timestamp":1688333690905,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Ten","suit":"Hearts"}}},
+            {"timestamp":1688333693818,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Three","suit":"Spades"}}},
+            {"timestamp":1688333695353,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Ten","suit":"Clubs"}}},
+            {"timestamp":1688333696598,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Seven","suit":"Clubs"}}},
+            {"timestamp":1688333697974,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Ace","suit":"Spades"}}},
+            {"timestamp":1688333697975,"username":"Aga","action":{"action":"Score","points":2,"reason":"Thirty-one for two"}},
+            {"timestamp":1688333707611,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Nine","suit":"Spades"}}},
+            {"timestamp":1688333708575,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Five","suit":"Hearts"}}},
+            {"timestamp":1688333710859,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Seven","suit":"Hearts"}}},
+            {"timestamp":1688333710860,"username":"Geoff","action":{"action":"Score","points":1,"reason":"One for a go"}},
+            {"timestamp":1688333710860,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Five","suit":"Hearts"}}},
+            {"timestamp":1688333710861,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Ten","suit":"Clubs"}}},
+            {"timestamp":1688333710862,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Ten","suit":"Hearts"}}},
+            {"timestamp":1688333710862,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Ace","suit":"Spades"}}},
+            {"timestamp":1688333710862,"username":"Aga","action":{"action":"Score","points":12,"reason":"Fifteen two, fifteen four, fifteen six, fifteen eight and two pairs is 12"}},
+            {"timestamp":1688333710863,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Three","suit":"Spades"}}},
+            {"timestamp":1688333710864,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Seven","suit":"Clubs"}}},
+            {"timestamp":1688333710864,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Seven","suit":"Hearts"}}},
+            {"timestamp":1688333710865,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Nine","suit":"Spades"}}},
+            {"timestamp":1688333710865,"username":"Geoff","action":{"action":"Score","points":6,"reason":"Fifteen two, fifteen four and a pair is 6"}},
+            {"timestamp":1688333710865,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Ten","suit":"Spades"}}},
+            {"timestamp":1688333710866,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Queen","suit":"Clubs"}}},
+            {"timestamp":1688333710866,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Queen","suit":"Hearts"}}},
+            {"timestamp":1688333710867,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"King","suit":"Clubs"}}},
+            {"timestamp":1688333710867,"username":"Geoff","action":{"action":"Score","points":10,"reason":"Fifteen two, fifteen four, fifteen six, fifteen eight and a pair is 10"}},
+            {"timestamp":1688333710868,"username":"Aga","action":{"action":"NextToDeal"}},
+            {"timestamp":1688333710869,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Four","suit":"Spades"}}},
+            {"timestamp":1688333710869,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Ace","suit":"Hearts"}}},
+            {"timestamp":1688333710870,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Queen","suit":"Spades"}}},
+            {"timestamp":1688333710870,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Two","suit":"Clubs"}}},
+            {"timestamp":1688333710871,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Jack","suit":"Hearts"}}},
+            {"timestamp":1688333710871,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Ten","suit":"Hearts"}}},
+            {"timestamp":1688333710872,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Ace","suit":"Spades"}}},
+            {"timestamp":1688333710873,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Four","suit":"Hearts"}}},
+            {"timestamp":1688333710878,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Two","suit":"Hearts"}}},
+            {"timestamp":1688333710879,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Six","suit":"Clubs"}}},
+            {"timestamp":1688333710879,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Nine","suit":"Spades"}}},
+            {"timestamp":1688333710880,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Three","suit":"Hearts"}}},
+            {"timestamp":1688333710880,"username":"Aga","action":{"action":"EndDeal"}},
+            {"timestamp":1688333725340,"username":"Geoff","action":{"action":"PutInBox","card":{"rank":"Jack","suit":"Hearts"}}},
+            {"timestamp":1688333726192,"username":"Geoff","action":{"action":"PutInBox","card":{"rank":"Queen","suit":"Spades"}}},
+            {"timestamp":1688333728003,"username":"Aga","action":{"action":"PutInBox","card":{"rank":"Ten","suit":"Hearts"}}},
+            {"timestamp":1688333731285,"username":"Aga","action":{"action":"PutInBox","card":{"rank":"Ace","suit":"Hearts"}}},
+            {"timestamp":1688333731286,"username":"Aga","action":{"action":"CommunityCard","card":{"rank":"Jack","suit":"Spades"}}},
+            {"timestamp":1688333731286,"username":"Aga","action":{"action":"Score","points":2,"reason":"Two for his heels"}},
+            {"timestamp":1688333735393,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Four","suit":"Spades"}}},
+            {"timestamp":1688333741248,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Four","suit":"Hearts"}}},
+            {"timestamp":1688333741249,"username":"Aga","action":{"action":"Score","points":2,"reason":"A pair"}},
+            {"timestamp":1688333743791,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Nine","suit":"Spades"}}},
+            {"timestamp":1688333746769,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Six","suit":"Clubs"}}},
+            {"timestamp":1688333748356,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Two","suit":"Hearts"}}},
+            {"timestamp":1688333749625,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Three","suit":"Hearts"}}},
+            {"timestamp":1688333751668,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Ace","suit":"Spades"}}},
+            {"timestamp":1688333751669,"username":"Geoff","action":{"action":"Score","points":3,"reason":"A run of three"}},
+            {"timestamp":1688333754887,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Two","suit":"Clubs"}}},
+            {"timestamp":1688333754888,"username":"Aga","action":{"action":"Score","points":5,"reason":"Thirty-one for two and a run of three is five"}},
+            {"timestamp":1688333754889,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Two","suit":"Hearts"}}},
+            {"timestamp":1688333754889,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Four","suit":"Spades"}}},
+            {"timestamp":1688333754890,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Nine","suit":"Spades"}}},
+            {"timestamp":1688333754890,"username":"Geoff","action":{"action":"RevealCard","card":{"rank":"Ace","suit":"Spades"}}},
+            {"timestamp":1688333754891,"username":"Geoff","action":{"action":"Score","points":4,"reason":"Fifteen two, fifteen four, look all day, see no more"}},
+            {"timestamp":1688333754892,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Two","suit":"Clubs"}}},
+            {"timestamp":1688333754892,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Three","suit":"Hearts"}}},
+            {"timestamp":1688333754893,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Four","suit":"Hearts"}}},
+            {"timestamp":1688333754894,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Six","suit":"Clubs"}}},
+            {"timestamp":1688333754894,"username":"Aga","action":{"action":"Score","points":7,"reason":"Fifteen two, fifteen four and a run of three is 7"}},
+            {"timestamp":1688333754895,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Ten","suit":"Hearts"}}},
+            {"timestamp":1688333754895,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Jack","suit":"Hearts"}}},
+            {"timestamp":1688333754896,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Queen","suit":"Spades"}}},
+            {"timestamp":1688333754896,"username":"Aga","action":{"action":"RevealCard","card":{"rank":"Ace","suit":"Hearts"}}},
+            {"timestamp":1688333754897,"username":"Aga","action":{"action":"Score","points":8,"reason":"A double-run for eight"}},
+            {"timestamp":1688333754897,"username":"Geoff","action":{"action":"NextToDeal"}},
+            {"timestamp":1688333754897,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"King","suit":"Clubs"}}},
+            {"timestamp":1688333754898,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Queen","suit":"Diamonds"}}},
+            {"timestamp":1688333754898,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Four","suit":"Spades"}}},
+            {"timestamp":1688333754899,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Queen","suit":"Clubs"}}},
+            {"timestamp":1688333754899,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Eight","suit":"Hearts"}}},
+            {"timestamp":1688333754900,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Four","suit":"Diamonds"}}},
+            {"timestamp":1688333754915,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Nine","suit":"Spades"}}},
+            {"timestamp":1688333754916,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Five","suit":"Hearts"}}},
+            {"timestamp":1688333754917,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Nine","suit":"Clubs"}}},
+            {"timestamp":1688333754917,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Ace","suit":"Spades"}}},
+            {"timestamp":1688333754918,"username":"Aga","action":{"action":"ReceiveCard","card":{"rank":"Queen","suit":"Hearts"}}},
+            {"timestamp":1688333754918,"username":"Geoff","action":{"action":"ReceiveCard","card":{"rank":"Ace","suit":"Clubs"}}},
+            {"timestamp":1688333754919,"username":"Geoff","action":{"action":"EndDeal"}},
+            {"timestamp":1688333765889,"username":"Aga","action":{"action":"PutInBox","card":{"rank":"Eight","suit":"Hearts"}}},
+            {"timestamp":1688333767624,"username":"Aga","action":{"action":"PutInBox","card":{"rank":"King","suit":"Clubs"}}},
+            {"timestamp":1688333770520,"username":"Geoff","action":{"action":"PutInBox","card":{"rank":"Queen","suit":"Clubs"}}},
+            {"timestamp":1688333771010,"username":"Geoff","action":{"action":"PutInBox","card":{"rank":"Queen","suit":"Diamonds"}}},
+            {"timestamp":1688333771010,"username":"Geoff","action":{"action":"CommunityCard","card":{"rank":"Three","suit":"Diamonds"}}},
+            {"timestamp":1688333774147,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Queen","suit":"Hearts"}}},
+            {"timestamp":1688333778424,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Five","suit":"Hearts"}}},
+            {"timestamp":1688333778425,"username":"Geoff","action":{"action":"Score","points":2,"reason":"Fifteen for two"}},
+            {"timestamp":1688333791220,"username":"Aga","action":{"action":"PlayCard","card":{"rank":"Nine","suit":"Spades"}}},
+            {"timestamp":1688333792913,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Four","suit":"Diamonds"}}},
+            {"timestamp":1688333795082,"username":"Aga","action":{"action":"Pass"}},
+            {"timestamp":1688333797126,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Ace","suit":"Spades"}}},
+            {"timestamp":1688333800071,"username":"Geoff","action":{"action":"PlayCard","card":{"rank":"Ace","suit":"Clubs"}}},
+            {"timestamp":1688333800072,"username":"Geoff","action":{"action":"Score","points":3,"reason":"A pair and a go is three"}}
+        ]"#;
+
+        let actions = serde_json::from_str(actions).unwrap();
+
+        let settings = r#"{"format":"Cribbage","title":"Amazing Recreation","max_players":2,"target_score":121,"start_time":null}"#;
+        let settings = serde_json::from_str(settings).unwrap();
+        let seed = r#"{"rng":"ChaCha8","seed":"ddc4df3fef57586482c8b3f308907f1250ecddd856c0db168c23e0a462279a9f"}"#;
+        let seed = serde_json::from_str(seed).unwrap();
+
+        test_game(actions, settings, seed);
+    }
 }