From 33452f55afcad603f72e054d56ad7848a3d09503 Mon Sep 17 00:00:00 2001 From: salmonik Date: Wed, 28 Oct 2026 23:24:08 +0100 Subject: v1.2.0: show the symbol paytable on the slots board --- src/slots.rs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/slots.rs (limited to 'src/slots.rs') diff --git a/src/slots.rs b/src/slots.rs new file mode 100644 index 0000000..561c449 --- /dev/null +++ b/src/slots.rs @@ -0,0 +1,33 @@ +//! Shared slots rules used by both the server engine and the client board. + +pub const REELS: usize = 5; +pub const ROWS: usize = 3; +pub const SYMBOLS: [char; 6] = ['C', 'L', 'O', 'G', 'D', 'S']; + +/// Five paylines, each entry is the row used on reel 0..4. +pub const PAYLINES: [[usize; REELS]; 5] = [ + [0, 0, 0, 0, 0], // line 1: top + [1, 1, 1, 1, 1], // line 2: middle + [2, 2, 2, 2, 2], // line 3: bottom + [0, 1, 2, 1, 0], // line 4: V + [2, 1, 0, 1, 2], // line 5: inverted V +]; + +/// (symbol, 3-of-a-kind, 4-of-a-kind, 5-of-a-kind) multipliers of total bet. +pub const PAYTABLE: [(char, u64, u64, u64); 6] = [ + ('C', 2, 5, 15), + ('L', 3, 7, 20), + ('O', 3, 8, 25), + ('G', 4, 12, 40), + ('D', 6, 18, 70), + ('S', 9, 30, 150), +]; + +/// One-line paytable rendered under the reels. +pub fn paytable_line() -> String { + let entries: Vec = PAYTABLE + .iter() + .map(|(symbol, three, four, five)| format!("{symbol} {three}/{four}/{five}")) + .collect(); + format!("Pays 3/4/5 x bet: {}", entries.join(" ")) +} -- cgit v1.2.3