mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-28 05:33:48 -08:00
103 lines
3.3 KiB
Rust
103 lines
3.3 KiB
Rust
use rand::seq::SliceRandom;
|
|
use rand::thread_rng;
|
|
use rand::Rng;
|
|
use std::io::{self, Write};
|
|
|
|
fn print_centered(text: &str, width: usize) {
|
|
let pad_size: usize = if width > text.len() {
|
|
(width - text.len()) / 2
|
|
} else {
|
|
0
|
|
};
|
|
println!("{}{}", " ".repeat(pad_size), text);
|
|
}
|
|
|
|
fn print_instructions() {
|
|
println!("A SYNONYM OF A WORD MEANS ANOTHER WORD IN THE ENGLISH");
|
|
println!("LANGUAGE WHICH HAS THE SAME OR VERY NEARLY THE SAME MEANING.");
|
|
println!("I CHOOSE A WORD -- YOU TYPE A SYNONYM.");
|
|
println!("IF YOU CAN'T THINK OF A SYNONYM, TYPE THE WORD 'HELP'");
|
|
println!("AND I WILL TELL YOU A SYNONYM.\n");
|
|
}
|
|
|
|
fn ask_question(mut this_question: Vec<&str>) {
|
|
let right_words = ["RIGHT", "CORRECT", "FINE", "GOOD!", "CHECK"];
|
|
|
|
// use the first one in the main question
|
|
let base_word = this_question.remove(0);
|
|
|
|
loop {
|
|
print!(" WHAT IS A SYNONYM OF {base_word}? ");
|
|
io::stdout().flush().unwrap();
|
|
let mut answer: String = String::new();
|
|
io::stdin()
|
|
.read_line(&mut answer)
|
|
.expect("Failed to read the line");
|
|
let answer = answer.trim();
|
|
if answer == "HELP" {
|
|
// remove one random from the answers and show it
|
|
let random_index = thread_rng().gen_range(0..this_question.len());
|
|
println!(
|
|
"**** A SYNONYM OF {base_word} IS {}.",
|
|
this_question.remove(random_index)
|
|
);
|
|
} else if this_question.contains(&answer) {
|
|
println!("{}", right_words.choose(&mut rand::thread_rng()).unwrap());
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
const PAGE_WIDTH: usize = 64;
|
|
|
|
let mut synonyms = vec![
|
|
vec!["FIRST", "START", "BEGINNING", "ONSET", "INITIAL"],
|
|
vec!["SIMILAR", "ALIKE", "SAME", "LIKE", "RESEMBLING"],
|
|
vec!["MODEL", "PATTERN", "PROTOTYPE", "STANDARD", "CRITERION"],
|
|
vec!["SMALL", "INSIGNIFICANT", "LITTLE", "TINY", "MINUTE"],
|
|
vec!["STOP", "HALT", "STAY", "ARREST", "CHECK", "STANDSTILL"],
|
|
vec![
|
|
"HOUSE",
|
|
"DWELLING",
|
|
"RESIDENCE",
|
|
"DOMICILE",
|
|
"LODGING",
|
|
"HABITATION",
|
|
],
|
|
vec!["PIT", "HOLE", "HOLLOW", "WELL", "GULF", "CHASM", "ABYSS"],
|
|
vec!["PUSH", "SHOVE", "THRUST", "PROD", "POKE", "BUTT", "PRESS"],
|
|
vec!["RED", "ROUGE", "SCARLET", "CRIMSON", "FLAME", "RUBY"],
|
|
vec![
|
|
"PAIN",
|
|
"SUFFERING",
|
|
"HURT",
|
|
"MISERY",
|
|
"DISTRESS",
|
|
"ACHE",
|
|
"DISCOMFORT",
|
|
],
|
|
];
|
|
|
|
synonyms.shuffle(&mut thread_rng());
|
|
|
|
print_centered("SYNONYM", PAGE_WIDTH);
|
|
print_centered("CREATIVE COMPUTING MORRISTOWN, NEW JERSEY", PAGE_WIDTH);
|
|
println!("\n\n\n");
|
|
|
|
print_instructions();
|
|
|
|
for this_question in synonyms {
|
|
ask_question(this_question)
|
|
}
|
|
println!("SYNONYM DRILL COMPLETED.");
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////
|
|
// Poring Notes
|
|
// Poring Note: The "HELP" function .removes a variable
|
|
// from lists and shows it. This can lead to errors when
|
|
// the list becomes empty. But since the same issue happens
|
|
// on the original BASIC program, kept it intact
|
|
////////////////////////////////////////////////////////////
|