rspin 0.1.0

A terminal-based slot machine simulator with animated reels
use std::fmt::Display;

#[derive(Debug, Clone, PartialEq)]
pub enum Symbols {
    Circle,
    Hashtag,
    Dollar,
    AtSign,
    Seven,
    Astrisk,
    AndSign,
    Jackpot,
    Wild,
}

impl Display for Symbols {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        let symbol = match self {
            Symbols::Circle => "O",
            Symbols::Hashtag => "#",
            Symbols::Dollar => "$",
            Symbols::AtSign => "@",
            Symbols::Seven => "7",
            Symbols::Astrisk => "*",
            Symbols::AndSign => "&",
            Symbols::Jackpot => "!",
            Symbols::Wild => "X",
        };
        write!(f, "{symbol}")
    }
}

impl Symbols {
    pub fn get_value(&self) -> i32 {
        match self {
            Symbols::Circle | Symbols::Hashtag | Symbols::Dollar | Symbols::AtSign => 1,
            Symbols::Seven | Symbols::Astrisk | Symbols::AndSign => 2,
            Symbols::Jackpot => 7,
            Symbols::Wild => 0,
        }
    }
}

pub const REEL_STRIPS: [[Symbols; 20]; 5] = [
    [
        Symbols::Circle,
        Symbols::Circle,
        Symbols::Hashtag,
        Symbols::Hashtag,
        Symbols::Hashtag,
        Symbols::Dollar,
        Symbols::Dollar,
        Symbols::AtSign,
        Symbols::AtSign,
        Symbols::Seven,
        Symbols::Seven,
        Symbols::Seven,
        Symbols::AndSign,
        Symbols::AndSign,
        Symbols::Astrisk,
        Symbols::Astrisk,
        Symbols::Astrisk,
        Symbols::Jackpot,
        Symbols::Wild,
        Symbols::Wild,
    ],
    [
        Symbols::Circle,
        Symbols::Circle,
        Symbols::Hashtag,
        Symbols::Hashtag,
        Symbols::Hashtag,
        Symbols::Dollar,
        Symbols::Dollar,
        Symbols::AtSign,
        Symbols::AtSign,
        Symbols::Seven,
        Symbols::Seven,
        Symbols::Seven,
        Symbols::AndSign,
        Symbols::AndSign,
        Symbols::Astrisk,
        Symbols::Astrisk,
        Symbols::Astrisk,
        Symbols::Jackpot,
        Symbols::Wild,
        Symbols::Wild,
    ],
    [
        Symbols::Circle,
        Symbols::Circle,
        Symbols::Hashtag,
        Symbols::Hashtag,
        Symbols::Hashtag,
        Symbols::Dollar,
        Symbols::Dollar,
        Symbols::AtSign,
        Symbols::AtSign,
        Symbols::Seven,
        Symbols::Seven,
        Symbols::Seven,
        Symbols::AndSign,
        Symbols::AndSign,
        Symbols::Astrisk,
        Symbols::Astrisk,
        Symbols::Astrisk,
        Symbols::Jackpot,
        Symbols::Wild,
        Symbols::Wild,
    ],
    [
        Symbols::Circle,
        Symbols::Circle,
        Symbols::Hashtag,
        Symbols::Hashtag,
        Symbols::Hashtag,
        Symbols::Dollar,
        Symbols::Dollar,
        Symbols::AtSign,
        Symbols::AtSign,
        Symbols::Seven,
        Symbols::Seven,
        Symbols::Seven,
        Symbols::AndSign,
        Symbols::AndSign,
        Symbols::Astrisk,
        Symbols::Astrisk,
        Symbols::Astrisk,
        Symbols::Jackpot,
        Symbols::Wild,
        Symbols::Wild,
    ],
    [
        Symbols::Circle,
        Symbols::Circle,
        Symbols::Hashtag,
        Symbols::Hashtag,
        Symbols::Hashtag,
        Symbols::Dollar,
        Symbols::Dollar,
        Symbols::AtSign,
        Symbols::AtSign,
        Symbols::Seven,
        Symbols::Seven,
        Symbols::Seven,
        Symbols::AndSign,
        Symbols::AndSign,
        Symbols::Astrisk,
        Symbols::Astrisk,
        Symbols::Astrisk,
        Symbols::Jackpot,
        Symbols::Wild,
        Symbols::Wild,
    ],
];