diff --git a/75_Roulette/rust/Cargo.toml b/75_Roulette/rust/Cargo.toml index 6767078c..79ced295 100644 --- a/75_Roulette/rust/Cargo.toml +++ b/75_Roulette/rust/Cargo.toml @@ -6,5 +6,5 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -morristown = "0.1.2" +morristown = "0.1.3" rand = "0.8.5" diff --git a/75_Roulette/rust/src/main.rs b/75_Roulette/rust/src/main.rs index 5c1d314a..f4af5d74 100644 --- a/75_Roulette/rust/src/main.rs +++ b/75_Roulette/rust/src/main.rs @@ -4,8 +4,6 @@ use morristown::Instructions; use rand::Rng; use util::INSTRUCTIONS; -use crate::util::print_check; - fn main() { morristown::print_intro("ROULETTE"); @@ -28,7 +26,7 @@ fn main() { loop { let bet_count = morristown::prompt_number_range::("HOW MANY BETS?", 1, std::u8::MAX); - let mut bets = Vec::new(); + let mut bets: Vec> = Vec::new(); for i in 1..=bet_count { loop { @@ -37,18 +35,23 @@ fn main() { morristown::prompt_multi_number::(msg.as_str(), ",", Some((2, 2))); let (bet_num, wager) = (bet_input[0], bet_input[1]); - if bet_num > 0 && bet_num <= 50 && wager > 5 && wager < 500 && wager <= player { - bets.push(bet_input); - } else if bets.contains(&bet_input) { + if let Some(_) = bets.iter().find(|bet| bet[0] == bet_num) { println!("YOU MADE THAT BET ONCE ALREADY, DUM-DUM"); + } else if bet_num > 0 && bet_num <= 50 && wager >= 5 && wager <= 500 { + bets.push(bet_input); + player -= wager; + house += wager; + break; + } else if wager > player { + println!("NOT ENOUGH MONEY") } else { println!("INVALID BET. TRY AGAIN"); } } } - /*SPIN AND CHECK RESULTS */ println!("\nSPINNING"); + std::thread::sleep(std::time::Duration::from_secs(1)); let spin: u8 = rand::thread_rng().gen_range(1..=38); let color = if util::REDS.contains(&spin) { @@ -57,28 +60,26 @@ fn main() { "BLACK" }; - println!("\n{} {}", spin, color); + println!("\n{} {}\n", spin, color); for (i, bet) in bets.iter().enumerate() { let (bet_num, wager) = (bet[0] as u8, bet[1]); let (win, payoff) = util::process_bet(bet_num, spin); let msg = if win { - let wager = wager * payoff as usize; - player += wager; - house -= wager; + let pay = wager * payoff as usize; + player += wager + pay; + house -= pay; "WIN" } else { - player -= wager; - house += wager; "LOSE" }; println!("YOU {msg} {wager} DOLLARS ON BET {}", i + 1); } - println!("TOTALS\tME\tYOU"); - println!("\t\t{house}\t{player}"); + println!("\nTOTALS:\t\tME\t\tYOU"); + println!("\t\t{house}\t\t{player}"); if player <= 0 { println!("OOPS! YOU JUST SPENT YOUR LAST DOLLAR"); @@ -89,12 +90,12 @@ fn main() { if house <= 0 { println!("YOU BROKE THE HOUSE!"); - print_check(player); + util::print_check(player, date); break; } if !morristown::prompt_bool("AGAIN?", false) { - print_check(player); + util::print_check(player, date); break; } } diff --git a/75_Roulette/rust/src/util.rs b/75_Roulette/rust/src/util.rs index 7af01917..321a1416 100644 --- a/75_Roulette/rust/src/util.rs +++ b/75_Roulette/rust/src/util.rs @@ -1,5 +1,7 @@ use std::ops::RangeInclusive; +use rand::{thread_rng, Rng}; + pub const INSTRUCTIONS: [&str; 38] = [ "\nTHIS IS THE BETTING LAYOUT", "\n(*=RED)\n", @@ -7,18 +9,18 @@ pub const INSTRUCTIONS: [&str; 38] = [ "4\t5*\t6", "7*\t8\t9*", "10\t11\t12*", - "---------------------", + "--------------------", "13\t14*\t15", "16*\t17\t18*", "19*\t20\t21*", "22\t23*\t24", - "---------------------", + "--------------------", "25*\t26\t27*", "28\t29\t30*", "31\t32*\t33", "34*\t35\t36*", - "---------------------", - "\t\t00\t0\n", + "--------------------", + " 00 0\n", "TYPES OF BETS\n", "THE NUMBERS 1 TO 36 SIGNIFY A STRAIGHT BET", "ON THAT NUMBER", @@ -45,13 +47,6 @@ pub const REDS: [u8; 18] = [ 1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36, ]; -pub fn print_check(money: usize) { - let name = morristown::prompt_string("TO WHOM SHALL I MAKE THE CHECK?"); - //let _check_no; // random - /*PRINT THE CHECK */ - todo!() -} - pub fn process_bet(bet_num: u8, spin: u8) -> (bool, u8) { match bet_num { 1..=36 => (bet_num == spin, 35), @@ -77,3 +72,20 @@ pub fn process_bet(bet_num: u8, spin: u8) -> (bool, u8) { fn is_within_range(r: RangeInclusive, n: u8) -> bool { r.contains(&n) } + +pub fn print_check(money: usize, date: Vec) { + let name = morristown::prompt_string("TO WHOM SHALL I MAKE THE CHECK?"); + let check_no = thread_rng().gen_range(1..=100); + + let dashes = 60; + + println!("\n{}", "-".repeat(dashes)); + println!("CHECK NO. {}\n", check_no); + println!("{}{}, {}\n\n", "\t".repeat(4), date[0], date[1]); + println!("PAY TO THE ORDER OF-----{name}-----$ {money}\n\n"); + println!("\t\tTHE MEMORY BANK OF VIRGINIA\n"); + println!("\t\t\t\tTHE COMPUTER"); + println!("\t\t\t ----------X-----\t"); + println!("{}", "-".repeat(dashes)); + println!("COME BACK SOON!\n") +}