From 7ab91a0e9b23214a8fda4c4745610d8543d78da6 Mon Sep 17 00:00:00 2001 From: mur4ik18 Date: Mon, 14 Feb 2022 19:22:51 +0200 Subject: [PATCH 01/10] :rocket: 41_guess add rust --- 41_Guess/rust/Cargo.toml | 9 ++++ 41_Guess/rust/README.md | 3 ++ 41_Guess/rust/src/main.rs | 86 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 41_Guess/rust/Cargo.toml create mode 100644 41_Guess/rust/README.md create mode 100644 41_Guess/rust/src/main.rs diff --git a/41_Guess/rust/Cargo.toml b/41_Guess/rust/Cargo.toml new file mode 100644 index 00000000..66ea57a5 --- /dev/null +++ b/41_Guess/rust/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "guess" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +rand = "0.8.4" \ No newline at end of file diff --git a/41_Guess/rust/README.md b/41_Guess/rust/README.md new file mode 100644 index 00000000..a2d10996 --- /dev/null +++ b/41_Guess/rust/README.md @@ -0,0 +1,3 @@ +Original source downloaded [from Vintage Basic](http://www.vintage-basic.net/games.html) + +Conversion to [Python](https://www.rust-lang.org/) diff --git a/41_Guess/rust/src/main.rs b/41_Guess/rust/src/main.rs new file mode 100644 index 00000000..442e348b --- /dev/null +++ b/41_Guess/rust/src/main.rs @@ -0,0 +1,86 @@ +use rand::Rng; +use std::io; +use std::cmp::Ordering; +// Rust haven't log2 in the standard library so I added fn log_2 +const fn num_bits() -> usize { std::mem::size_of::() * 8 } + +fn main() { + + let mut rng = rand::thread_rng(); + let mut still_guessing = true; + let limit = set_limit(); + let limit_goal = 1+(log_2(limit.try_into().unwrap())/log_2(2)) ; + loop{ + + let mut won = false; + let mut guess_count = 1; + let my_guess = rng.gen_range(1..limit); + + println!("I'm thinking of a number between 1 and {}",limit); + println!("Now you try to guess what it is."); + + while still_guessing { + let inp = get_input() + .trim() + .parse::().unwrap(); + println!("\n\n\n"); + if inp < my_guess { + println!("Too low. Try a bigger answer"); + guess_count+=1; + } + else if inp > my_guess { + println!("Too high. Try a smaller answer"); + guess_count+=1; + } + else { + println!("That's it! You got it in {} tries", guess_count); + won = true; + still_guessing = false; + } + } + if won { + match guess_count.cmp(&limit_goal) { + Ordering::Less => println!("Very good."), + Ordering::Equal => println!("Good."), + Ordering::Greater => println!("You should have been able to get it in only {}", limit_goal), + } + + println!("\n\n\n"); + still_guessing = true; + } else { + println!("\n\n\n"); + } + } +} + +fn log_2(x:i32) -> u32 { + assert!(x > 0); + num_bits::() as u32 - x.leading_zeros() - 1 +} + +fn set_limit() -> i64 { + + println!(" Guess"); + println!("\n\n\n"); + println!("This is a number guessing game. I'll think"); + println!("of a number between 1 and any limit you want.\n"); + println!("Then you have to guess what it is\n"); + println!("What limit do you want?"); + + let inp = get_input().trim().parse::().unwrap(); + + if inp >= 2 { + inp + } + else { + set_limit() + } +} + +fn get_input() -> String { + let mut input = String::new(); + io::stdin() + .read_line(&mut input) + .expect("Your input is not correct"); + input +} From 971e75d066a70fe610eb349ccb99652bba54827d Mon Sep 17 00:00:00 2001 From: Alex Kotov <79057640+mur4ik18@users.noreply.github.com> Date: Mon, 14 Feb 2022 19:24:34 +0200 Subject: [PATCH 02/10] Update README.md --- 41_Guess/rust/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/41_Guess/rust/README.md b/41_Guess/rust/README.md index a2d10996..fc6468b9 100644 --- a/41_Guess/rust/README.md +++ b/41_Guess/rust/README.md @@ -1,3 +1,3 @@ Original source downloaded [from Vintage Basic](http://www.vintage-basic.net/games.html) -Conversion to [Python](https://www.rust-lang.org/) +Conversion to [Rust](https://www.rust-lang.org/) From b79200166eb927898efdf5723dd6205d218e8807 Mon Sep 17 00:00:00 2001 From: Alex Kotov <79057640+mur4ik18@users.noreply.github.com> Date: Mon, 14 Feb 2022 19:27:44 +0200 Subject: [PATCH 03/10] Update main.rs --- 41_Guess/rust/src/main.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/41_Guess/rust/src/main.rs b/41_Guess/rust/src/main.rs index 442e348b..da175038 100644 --- a/41_Guess/rust/src/main.rs +++ b/41_Guess/rust/src/main.rs @@ -1,3 +1,26 @@ +//####################################################### +// +// Guess +// +// From: Basic Computer Games (1978) +// +// "In program Guess, the computer chooses a random +// integer between 0 and any limit and any limit you +// set. You must then try to guess the number the +// computer has choosen using the clues provideed by +// the computer. +// You should be able to guess the number in one less +// than the number of digits needed to represent the +// number in binary notation - i.e. in base 2. This ought +// to give you a clue as to the optimum search technique. +// Guess converted from the original program in FOCAL +// which appeared in the book "Computers in the Classroom" +// by Walt Koetke of Lexington High School, Lexington, +// Massaschusetts. +// +//####################################################### + + use rand::Rng; use std::io; use std::cmp::Ordering; From a54369c677d7b5b6af05f7860f734a7b5e218ad3 Mon Sep 17 00:00:00 2001 From: Peter Eastwood Date: Mon, 14 Feb 2022 19:29:37 +0000 Subject: [PATCH 04/10] 54_Letter - added csharp --- 54_Letter/csharp/Game.cs | 137 ++++++++++++++++++++++++++++++++++ 54_Letter/csharp/GameState.cs | 37 +++++++++ 54_Letter/csharp/Program.cs | 3 + 3 files changed, 177 insertions(+) create mode 100644 54_Letter/csharp/Game.cs create mode 100644 54_Letter/csharp/GameState.cs create mode 100644 54_Letter/csharp/Program.cs diff --git a/54_Letter/csharp/Game.cs b/54_Letter/csharp/Game.cs new file mode 100644 index 00000000..e7d525c9 --- /dev/null +++ b/54_Letter/csharp/Game.cs @@ -0,0 +1,137 @@ +namespace Letter +{ + internal static class Game + { + /// + /// Maximum number of guesses. + /// Note the program doesn't enforce this - it just displays a message if this is exceeded. + /// + private const int MaximumGuesses = 5; + + /// + /// Main game loop. + /// + public static void Play() + { + DisplayIntroductionText(); + + // Keep playing forever, or until the user quits. + while (true) + { + PlayRound(); + } + } + + /// + /// Play a single round. + /// + internal static void PlayRound() + { + var gameState = new GameState(); + DisplayRoundIntroduction(); + + char letterInput = '\0'; // Set the initial character to something that's not A-Z. + while (letterInput != gameState.Letter) + { + letterInput = GetCharacterFromKeyboard(); + gameState.GuessesSoFar++; + DisplayGuessResult(gameState.Letter, letterInput); + } + DisplaySuccessMessage(gameState); + } + + /// + /// Display an introduction when the game loads. + /// + internal static void DisplayIntroductionText() + { + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine("LETTER"); + Console.WriteLine("Creative Computing, Morristown, New Jersey."); + Console.WriteLine(""); + + Console.ForegroundColor = ConsoleColor.DarkGreen; + Console.WriteLine("Letter Guessing Game"); + Console.WriteLine("I'll think of a letter of the alphabet, A to Z."); + Console.WriteLine("Try to guess my letter and I'll give you clues"); + Console.WriteLine("as to how close you're getting to my letter."); + Console.WriteLine(""); + + Console.ResetColor(); + } + + /// + /// Display introductionary text for each round. + /// + internal static void DisplayRoundIntroduction() + { + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine("O.K., I have a letter. Start guessing."); + + Console.ResetColor(); + } + + /// + /// Display text depending whether the guess is lower or higher. + /// + internal static void DisplayGuessResult(char letterToGuess, char letterInput) + { + Console.BackgroundColor = ConsoleColor.White; + Console.ForegroundColor = ConsoleColor.Black; + Console.Write(" " + letterInput + " "); + + Console.ResetColor(); + Console.ForegroundColor = ConsoleColor.Gray; + Console.Write(" "); + if (letterInput != letterToGuess) + { + if (letterInput > letterToGuess) + { + Console.WriteLine("Too high. Try a lower letter"); + } + else + { + Console.WriteLine("Too low. Try a higher letter"); + } + } + Console.ResetColor(); + } + + /// + /// Display success, and the number of guesses. + /// + internal static void DisplaySuccessMessage(GameState gameState) + { + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine($"You got it in {gameState.GuessesSoFar} guesses!!"); + if (gameState.GuessesSoFar > MaximumGuesses) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine($"But it shouldn't take more than {MaximumGuesses} guesses!"); + } + else + { + Console.WriteLine("Good job !!!!!"); + } + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine(""); + Console.WriteLine("Let's play again....."); + + Console.ResetColor(); + } + + /// + /// Get valid input from the keyboard: must be an alpha character. Converts to upper case if necessary. + /// + internal static char GetCharacterFromKeyboard() + { + char letterInput; + do + { + var keyPressed = Console.ReadKey(true); + letterInput = Char.ToUpper(keyPressed.KeyChar); // Convert to upper case immediately. + } while (!Char.IsLetter(letterInput)); // If the input is not a letter, wait for another letter to be pressed. + return letterInput; + } + } +} diff --git a/54_Letter/csharp/GameState.cs b/54_Letter/csharp/GameState.cs new file mode 100644 index 00000000..02aa38b1 --- /dev/null +++ b/54_Letter/csharp/GameState.cs @@ -0,0 +1,37 @@ +namespace Letter +{ + /// + /// Holds the current state. + /// + internal class GameState + { + /// + /// Initialise the game state with a random letter. + /// + public GameState() + { + Letter = GetRandomLetter(); + GuessesSoFar = 0; + } + + /// + /// The letter that the user is guessing. + /// + public char Letter { get; set; } + + /// + /// The number of guesses the user has had so far. + /// + public int GuessesSoFar { get; set; } + + /// + /// Get a random character (A-Z) for the user to guess. + /// + internal static char GetRandomLetter() + { + var random = new Random(); + var randomNumber = random.Next(0, 26); + return (char)('A' + randomNumber); + } + } +} diff --git a/54_Letter/csharp/Program.cs b/54_Letter/csharp/Program.cs new file mode 100644 index 00000000..9a1c29db --- /dev/null +++ b/54_Letter/csharp/Program.cs @@ -0,0 +1,3 @@ +using Letter; + +Game.Play(); \ No newline at end of file From 605a80767280c46767687253c78b5f8f7fca1999 Mon Sep 17 00:00:00 2001 From: mur4ik18 Date: Tue, 15 Feb 2022 23:04:10 +0200 Subject: [PATCH 05/10] :memo: updated .gitignore for rust --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index fea38bce..d6fb1f7f 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,7 @@ Pipfile .DS_Store .vs/ +/target/ +Cargo.lock +**/*.rs.bk +/target From a97e36e4e31701214556853700f978bda33a6e13 Mon Sep 17 00:00:00 2001 From: mur4ik18 Date: Tue, 15 Feb 2022 23:17:17 +0200 Subject: [PATCH 06/10] :rocket: Ace game in rust started --- .gitignore | 2 +- 01_Acey_Ducey/rust/Cargo.toml | 9 +++++++++ 01_Acey_Ducey/rust/src/main.rs | 28 ++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 01_Acey_Ducey/rust/Cargo.toml create mode 100644 01_Acey_Ducey/rust/src/main.rs diff --git a/.gitignore b/.gitignore index d6fb1f7f..2675262f 100644 --- a/.gitignore +++ b/.gitignore @@ -31,7 +31,7 @@ Pipfile .DS_Store .vs/ -/target/ +**/target/ Cargo.lock **/*.rs.bk /target diff --git a/01_Acey_Ducey/rust/Cargo.toml b/01_Acey_Ducey/rust/Cargo.toml new file mode 100644 index 00000000..3b1d02f5 --- /dev/null +++ b/01_Acey_Ducey/rust/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "rust" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +rand = "0.8.5" diff --git a/01_Acey_Ducey/rust/src/main.rs b/01_Acey_Ducey/rust/src/main.rs new file mode 100644 index 00000000..b9057180 --- /dev/null +++ b/01_Acey_Ducey/rust/src/main.rs @@ -0,0 +1,28 @@ +use std::io; + + +fn main() { + let mut user_bank: u16 = 100; + +} + +fn hello() { + println!(" 🂡 ACEY DUCEY CARD GAME 🂱"); + println!("CREATIVE COMPUTING - MORRISTOWN, NEW JERSEY"); + println!(" ACEY-DUCEY IS PLAYED IN THE FOLLOWING MANNER"); + println!("THE DEALER (COMPUTER) DEALS TWO CARDS FACE UP"); + println!("YOU HAVE AN OPTION TO BET OR NOT BET DEPENDING"); + println!("ON WHETHER OR NOT YOU FEEL THE CARD WILL HAVE"); + println!("A VALUE BETWEEN THE FIRST TWO."); + println!("IF YOU DO NOT WANT TO BET IN A ROUND, ENTER 0"); +} + +fn card_name(card: u8) -> String { + match card { + 11 => String::from("JACK"), + 12 => String::from("QUEEN"), + 13 => String::from("KING"), + 14 => String::from("ACE"), + _ => card.to_string() + } +} From 28afbb35aa68ac2dac1d741ab8bba02ce94a71c7 Mon Sep 17 00:00:00 2001 From: mur4ik18 Date: Wed, 16 Feb 2022 00:52:33 +0200 Subject: [PATCH 07/10] :rocket: half of game complete --- 01_Acey_Ducey/rust/src/main.rs | 57 ++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/01_Acey_Ducey/rust/src/main.rs b/01_Acey_Ducey/rust/src/main.rs index b9057180..aece3f53 100644 --- a/01_Acey_Ducey/rust/src/main.rs +++ b/01_Acey_Ducey/rust/src/main.rs @@ -1,9 +1,43 @@ use std::io; +use std::process; +use rand::{Rng, prelude::ThreadRng}; + +struct CardsPool { + first: u8, + second: u8, + third: u8 +} +impl CardsPool { + fn new(rng: &mut ThreadRng)-> CardsPool{ + CardsPool{ + first: rng.gen_range(2..15), + second: rng.gen_range(2..15), + third: rng.gen_range(2..15) + } + } +} fn main() { + // user start bank let mut user_bank: u16 = 100; + let mut rng = rand::thread_rng(); + loop { + println!("YOU NOW HAVE {} DOLLARS.", &mut user_bank); + println!("HERE ARE YOUR NEXT TWO CARDS:"); + // get new random cards + let cards = CardsPool::new(&mut rng); + println!("{}", card_name(cards.first)); + println!("{}", card_name(cards.second)); + let mut user_bet: u16; + user_bet = get_bet(user_bank); + if user_bet == 0 { + println!("CHICKEN!!!"); + continue; + } + println!("{}", card_name(cards.third)); + } } fn hello() { @@ -26,3 +60,26 @@ fn card_name(card: u8) -> String { _ => card.to_string() } } + + +fn get_bet(user_bank: u16) -> u16 { + println!("WHAT IS YOUR BET? ENTER 0 IF YOU DON'T WANT TO BET (CTRL+C TO EXIT)"); + let mut bet: u16; + let mut input = String::new(); + + io::stdin() + .read_line(&mut input) + .expect("Sorry your input incorrect"); + + bet = input.trim().parse::().unwrap(); + match bet { + 0 => bet, + bet if bet < user_bank => bet, + _ => { + println!("SORRY, MY FRIEND, BUT YOU BET TOO MUCH."); + println!("YOU HAVE ONLY {} DOLLARS TO BET.", user_bank); + get_bet(user_bank) + } + } +} + From 281bcbf2a2a32ff9903e31ad7191d09194300cbb Mon Sep 17 00:00:00 2001 From: mur4ik18 Date: Wed, 16 Feb 2022 05:19:38 +0200 Subject: [PATCH 08/10] :rocket: 01 in rust complete --- 01_Acey_Ducey/rust/src/main.rs | 51 ++++++++++++++++++++++++++++++---- 1 file changed, 46 insertions(+), 5 deletions(-) diff --git a/01_Acey_Ducey/rust/src/main.rs b/01_Acey_Ducey/rust/src/main.rs index aece3f53..3aeca5c5 100644 --- a/01_Acey_Ducey/rust/src/main.rs +++ b/01_Acey_Ducey/rust/src/main.rs @@ -1,5 +1,4 @@ use std::io; -use std::process; use rand::{Rng, prelude::ThreadRng}; struct CardsPool { @@ -9,9 +8,18 @@ struct CardsPool { } impl CardsPool { fn new(rng: &mut ThreadRng)-> CardsPool{ + let mut f = rng.gen_range(2..15); + let mut s = rng.gen_range(2..15); + + if f > s { + let x = f; + f = s; + s = x; + } + CardsPool{ - first: rng.gen_range(2..15), - second: rng.gen_range(2..15), + first: f, + second: s, third: rng.gen_range(2..15) } } @@ -19,6 +27,7 @@ impl CardsPool { fn main() { + hello(); // user start bank let mut user_bank: u16 = 100; let mut rng = rand::thread_rng(); @@ -27,16 +36,47 @@ fn main() { println!("HERE ARE YOUR NEXT TWO CARDS:"); // get new random cards let cards = CardsPool::new(&mut rng); + println!("{}", card_name(cards.first)); println!("{}", card_name(cards.second)); + let mut user_bet: u16; user_bet = get_bet(user_bank); + if user_bet == 0 { - println!("CHICKEN!!!"); + println!("CHICKEN!!!\n"); continue; } + else { + println!("THANK YOU! YOUR BET IS {} DOLLARS.", &mut user_bet); + } + + println!("\nTHE THIRD CARD IS:"); println!("{}", card_name(cards.third)); + if cards.first <= cards.third && cards.third <= cards.second { + println!("YOU WIN!!!\n"); + user_bank += user_bet; + } else { + println!("SORRY, YOU LOSE\n"); + user_bank -= user_bet; + } + + + if user_bank == 0 { + println!("\nSORRY, FRIEND, BUT YOU BLEW YOUR WAD.\n"); + println!("TRY AGAIN? (yes OR no)"); + let mut input = String::new(); + io::stdin() + .read_line(&mut input) + .expect("Incorrect input"); + + if String::from("yes") == input { + user_bank = 100; + } else { + println!("O.K., HOPE YOU HAD FUN!"); + } + } } } @@ -49,6 +89,7 @@ fn hello() { println!("ON WHETHER OR NOT YOU FEEL THE CARD WILL HAVE"); println!("A VALUE BETWEEN THE FIRST TWO."); println!("IF YOU DO NOT WANT TO BET IN A ROUND, ENTER 0"); + println!("\n\n\n"); } fn card_name(card: u8) -> String { @@ -64,7 +105,7 @@ fn card_name(card: u8) -> String { fn get_bet(user_bank: u16) -> u16 { println!("WHAT IS YOUR BET? ENTER 0 IF YOU DON'T WANT TO BET (CTRL+C TO EXIT)"); - let mut bet: u16; + let bet: u16; let mut input = String::new(); io::stdin() From d520f15f141f7bd26459ed1372eca82e5a8e8ea9 Mon Sep 17 00:00:00 2001 From: Alex Kotov <79057640+mur4ik18@users.noreply.github.com> Date: Wed, 16 Feb 2022 05:23:37 +0200 Subject: [PATCH 09/10] Create README.md --- 01_Acey_Ducey/rust/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 01_Acey_Ducey/rust/README.md diff --git a/01_Acey_Ducey/rust/README.md b/01_Acey_Ducey/rust/README.md new file mode 100644 index 00000000..9df86bc0 --- /dev/null +++ b/01_Acey_Ducey/rust/README.md @@ -0,0 +1,3 @@ +Original source downloaded [from Vintage Basic](http://www.vintage-basic.net/games.html) + +Conversion to [Rust](https://www.rust-lang.org/) by Alex Kotov [mur4ik18@github](https://github.com/mur4ik18). From e12ade3656ae565de02dc456b6603b2641fd1ab1 Mon Sep 17 00:00:00 2001 From: remimimimi Date: Wed, 16 Feb 2022 17:10:21 +0300 Subject: [PATCH 10/10] Refactor code --- 01_Acey_Ducey/rust/src/main.rs | 107 +++++++++++++++++---------------- 1 file changed, 56 insertions(+), 51 deletions(-) diff --git a/01_Acey_Ducey/rust/src/main.rs b/01_Acey_Ducey/rust/src/main.rs index 3aeca5c5..d8eed2ba 100644 --- a/01_Acey_Ducey/rust/src/main.rs +++ b/01_Acey_Ducey/rust/src/main.rs @@ -1,60 +1,79 @@ -use std::io; -use rand::{Rng, prelude::ThreadRng}; +use rand::{prelude::ThreadRng, Rng}; +use std::{fmt, io, mem}; -struct CardsPool { - first: u8, - second: u8, - third: u8 -} -impl CardsPool { - fn new(rng: &mut ThreadRng)-> CardsPool{ - let mut f = rng.gen_range(2..15); - let mut s = rng.gen_range(2..15); +#[derive(PartialEq, Eq, PartialOrd, Ord)] +struct Card(u8); - if f > s { - let x = f; - f = s; - s = x; - } - - CardsPool{ - first: f, - second: s, - third: rng.gen_range(2..15) - } +impl Card { + fn new_random(rng: &mut ThreadRng) -> Card { + Card(rng.gen_range(2..15)) } } +impl fmt::Display for Card { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "{}", + match self.0 { + 11 => String::from("JACK"), + 12 => String::from("QUEEN"), + 13 => String::from("KING"), + 14 => String::from("ACE"), + otherwise => otherwise.to_string(), + } + ) + } +} + +struct CardsPool(Card, Card, Card); + +impl CardsPool { + fn new() -> CardsPool { + let mut rng = rand::thread_rng(); + let mut first = Card::new_random(&mut rng); + let mut second = Card::new_random(&mut rng); + let third = Card::new_random(&mut rng); + + if first > second { + mem::swap(&mut first, &mut second); + } + + CardsPool(first, second, third) + } + + fn is_in_win_range(&self) -> bool { + self.0 <= self.2 && self.2 <= self.1 + } +} fn main() { hello(); // user start bank let mut user_bank: u16 = 100; - let mut rng = rand::thread_rng(); + loop { println!("YOU NOW HAVE {} DOLLARS.", &mut user_bank); println!("HERE ARE YOUR NEXT TWO CARDS:"); - // get new random cards - let cards = CardsPool::new(&mut rng); + // get new random cards + let cards = CardsPool::new(); - println!("{}", card_name(cards.first)); - println!("{}", card_name(cards.second)); + println!("{}", cards.0); + println!("{}", cards.1); - let mut user_bet: u16; - user_bet = get_bet(user_bank); + let user_bet: u16 = get_bet(user_bank); if user_bet == 0 { println!("CHICKEN!!!\n"); continue; - } - else { - println!("THANK YOU! YOUR BET IS {} DOLLARS.", &mut user_bet); + } else { + println!("THANK YOU! YOUR BET IS {} DOLLARS.", user_bet); } println!("\nTHE THIRD CARD IS:"); - println!("{}", card_name(cards.third)); + println!("{}", cards.2); - if cards.first <= cards.third && cards.third <= cards.second { + if cards.is_in_win_range() { println!("YOU WIN!!!\n"); user_bank += user_bet; } else { @@ -62,16 +81,13 @@ fn main() { user_bank -= user_bet; } - if user_bank == 0 { println!("\nSORRY, FRIEND, BUT YOU BLEW YOUR WAD.\n"); println!("TRY AGAIN? (yes OR no)"); let mut input = String::new(); - io::stdin() - .read_line(&mut input) - .expect("Incorrect input"); + io::stdin().read_line(&mut input).expect("Incorrect input"); - if String::from("yes") == input { + if "yes" == input { user_bank = 100; } else { println!("O.K., HOPE YOU HAD FUN!"); @@ -92,17 +108,6 @@ fn hello() { println!("\n\n\n"); } -fn card_name(card: u8) -> String { - match card { - 11 => String::from("JACK"), - 12 => String::from("QUEEN"), - 13 => String::from("KING"), - 14 => String::from("ACE"), - _ => card.to_string() - } -} - - fn get_bet(user_bank: u16) -> u16 { println!("WHAT IS YOUR BET? ENTER 0 IF YOU DON'T WANT TO BET (CTRL+C TO EXIT)"); let bet: u16; @@ -112,6 +117,7 @@ fn get_bet(user_bank: u16) -> u16 { .read_line(&mut input) .expect("Sorry your input incorrect"); + // XXX: Unhandled input bet = input.trim().parse::().unwrap(); match bet { 0 => bet, @@ -123,4 +129,3 @@ fn get_bet(user_bank: u16) -> u16 { } } } -