75_Roulette/rust

This commit is contained in:
Uğur Küpeli
2022-05-08 14:39:46 +03:00
parent cd7ed8c3fb
commit e7555fae96
3 changed files with 42 additions and 29 deletions

View File

@@ -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"

View File

@@ -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::<u8>("HOW MANY BETS?", 1, std::u8::MAX);
let mut bets = Vec::new();
let mut bets: Vec<Vec<usize>> = Vec::new();
for i in 1..=bet_count {
loop {
@@ -37,18 +35,23 @@ fn main() {
morristown::prompt_multi_number::<usize>(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;
}
}

View File

@@ -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<u8>, n: u8) -> bool {
r.contains(&n)
}
pub fn print_check(money: usize, date: Vec<String>) {
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")
}