use crate::games::traits::{Game, GameState}; pub struct SlotsGame; impl SlotsGame { pub fn new() -> Self { Self } fn render_reels(&self, reels: &str) -> String { if reels.is_empty() { "[ ? ] [ ? ] [ ? ]".to_string() } else { let chars: Vec = reels.chars().collect(); format!( "[ {} ] [ {} ] [ {} ]\r", chars.get(0).unwrap_or(&'?'), chars.get(1).unwrap_or(&'?'), chars.get(2).unwrap_or(&'?') ) } } } impl Game for SlotsGame { fn get_name(&self) -> &'static str { "Slots" } fn render(&self, state: &GameState) -> String { let reels = state.data.get("reels").cloned().unwrap_or_default(); let mut output = format!("\n=== SLOTS ===\r\n"); output += &format!("Bet: {} PLN\r\n", state.bet_amount); output += &format!("{}\r\n", self.render_reels(&reels)); output += "\nPress [SPACE] to spin!\r\n"; output += "\nControls: [+/-] Adjust Bet [Q] Quit\r\n"; output } fn render_lines(&self, _state: &GameState) -> usize { // Fixed count matching the render() layout: // blank, header, bet, reels, blank, prompt, blank, controls 8 } fn get_help(&self) -> String { "SLOTS GAME\n\ =========\n\ Match symbols to win!\n\ \n\ Payouts:\n\ Three of a kind: 5x-100x bet\n\ Two of a kind: 2x-20x bet\n\ \n\ Symbols: C=Cherry, L=Lemon, O=Orange, G=Grapes, D=Diamond, S=Seven\n\ \n\ Controls:\n\ SPACE - Spin the reels\n\ +/- - Adjust bet amount\n\ Q - Exit the game" .to_string() } }