From 63c2e2fc3ea299aee31b66d2bdd6ecd871df223a Mon Sep 17 00:00:00 2001 From: salmonik Date: Wed, 28 Oct 2026 22:44:41 +0100 Subject: v0.3.0: add server core, bcrypt migration and plays audit --- src/server/games/slots.rs | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'src/server/games/slots.rs') diff --git a/src/server/games/slots.rs b/src/server/games/slots.rs index 0a9797d..02595b1 100644 --- a/src/server/games/slots.rs +++ b/src/server/games/slots.rs @@ -5,6 +5,8 @@ use std::collections::HashMap; pub struct SlotsGame { symbols: Vec, payouts: HashMap, + /// Deterministic reels for tests and demos. + fixed_reels: Option>, } impl SlotsGame { @@ -27,10 +29,25 @@ impl SlotsGame { payouts.insert("DD".to_string(), 2); payouts.insert("SS".to_string(), 3); - Self { symbols, payouts } + Self { + symbols, + payouts, + fixed_reels: None, + } + } + + /// Build a slots game that always spins the given three symbols. + pub fn with_reels(reels: &str) -> Self { + let mut game = Self::new(); + game.fixed_reels = Some(reels.chars().take(3).collect()); + game } fn spin_reels(&self) -> Vec { + if let Some(reels) = &self.fixed_reels { + return reels.clone(); + } + let mut rng = rand::thread_rng(); (0..3) .map(|_| self.symbols[rng.gen_range(0..self.symbols.len())]) @@ -41,7 +58,7 @@ impl SlotsGame { let reel_string: String = reels.iter().collect(); if let Some(&multiplier) = self.payouts.get(&reel_string) { - return bet * multiplier; + return bet.saturating_mul(multiplier); } // Check all three pairs including non-adjacent (e.g. [C,D,C]) @@ -51,7 +68,7 @@ impl SlotsGame { if reels[a] == reels[b] { let two_of_kind = format!("{}{}", reels[a], reels[a]); if let Some(&multiplier) = self.payouts.get(&two_of_kind) { - best = best.max(bet * multiplier); + best = best.max(bet.saturating_mul(multiplier)); } } } -- cgit v1.2.3