Rephrased some error messages. Goal messages are now set at runtime.

This commit is contained in:
Gnarwhal 2019-07-26 11:25:42 -07:00
parent d71d282b48
commit 372276060c
Signed by: Gnarwhal
GPG key ID: 0989A73D8C421174

View file

@ -52,7 +52,7 @@ struct Parameters {
} }
fn main() { fn main() {
println!("{}\n\n", MINIMAX_TITLE); println!("{}\n", MINIMAX_TITLE);
println!("Welcome to Minimax, a simple game of perfect knowledge! println!("Welcome to Minimax, a simple game of perfect knowledge!
@ -105,12 +105,12 @@ So! Without further ado let's get this show on the road!
num num
} }
else { else {
println!("Zero is pretty great! Alas it does not make sense as a depth value!"); println!("Zero is pretty great! Alas it does not work as a depth value in this case!");
continue; continue;
} }
}, },
Err(_) => { Err(_) => {
println!("A depth of \"value\" does not make sense to me! I was expecting a positive number!"); println!("Hmm an interesting proposition! Unfortunately I don't know how to handle negative depths at this time!");
continue; continue;
}, },
}; };
@ -135,11 +135,11 @@ So! Without further ado let's get this show on the road!
} }
}; };
}, },
Ok((key, _)) => println!("\"{}\" is not a key I recognize! Perhaps try something else!", key), Ok((key, _)) => println!("\"{}\" is not a key I am familiar with!", key),
Err(_) => println!("Unfortunately I'm not sure what you are trying to set with the command \"{}\"!", string), Err(_) => println!("The syntax in your set command \"{}\" appears to be off!", string),
}, },
Action::Quit => break, Action::Quit => break,
Action::Invalid(err) => println!("Beep! Bop! Boop! Cannot compute \"{}\"! Haha!", err), Action::Invalid(err) => println!("Beep! Bop! Boop! Cannot execute command \"{}\"! Haha!", err),
} }
} }
} }
@ -280,7 +280,7 @@ fn parse_bool(value: &str) -> Result<bool, &'static str> {
match value { match value {
"true" => Ok(true), "true" => Ok(true),
"false" => Ok(false), "false" => Ok(false),
_ => Err("I do apologize, but I was expecting a boolean type!"), _ => Err("I do apologize, but I was expecting a boolean value!"),
} }
} }
@ -295,21 +295,24 @@ fn run_game(params: &Parameters) {
//loop { //loop {
println!("Let the game begin! println!("Let the game begin!
Player one you are trying to maximize the value. Player two you are trying to minimize the value."); Player one you are trying to {player_one_goal} the value. Player two you are trying to {player_two_goal} the value.",
player_one_goal = if params.parity { "maximize" } else { "minimize" },
player_two_goal = if params.parity { "minimize" } else { "maximize" });
print_tree(&tree); print_tree(&tree);
//} //}
} }
fn generate_tree(depth: u32, parity: bool) -> Vec<Vec<u32>> { fn generate_tree(depth: u32, parity: bool) -> Vec<Vec<i32>> {
const TREE_RANGE: u32 = 1000; const TREE_RANGE_MIN: i32 = 100;
const TREE_RANGE_MAX: i32 = 1000;
let mut tree: Vec<Vec<u32>> = Vec::new(); let mut tree: Vec<Vec<i32>> = Vec::new();
let mut leaves: Vec<u32> = Vec::new(); let mut leaves: Vec<i32> = Vec::new();
let mut leaf_count = pow(2, depth - 1); let mut leaf_count = pow(2, depth - 1);
while leaf_count > 0 { while leaf_count > 0 {
leaves.push(rand::thread_rng().gen_range(0, TREE_RANGE)); leaves.push(rand::thread_rng().gen_range(TREE_RANGE_MIN, TREE_RANGE_MAX));
leaf_count -= 1; leaf_count -= 1;
} }
tree.push(leaves); tree.push(leaves);
@ -329,9 +332,9 @@ fn pow(mut base: u32, mut power: u32) -> u32 {
result result
} }
fn expand_tree(tree: &mut Vec<Vec<u32>>, parity: bool) { fn expand_tree(tree: &mut Vec<Vec<i32>>, parity: bool) {
if tree[0].len() == 1 { return; } if tree[0].len() == 1 { return; }
let mut write_layer: Vec<u32> = Vec::new(); let mut write_layer: Vec<i32> = Vec::new();
for i in 0..tree[0].len() / 2 { for i in 0..tree[0].len() / 2 {
write_layer.push( write_layer.push(
if (tree[0][i * 2] < tree[0][i * 2 + 1]) == parity { tree[0][i * 2] } if (tree[0][i * 2] < tree[0][i * 2 + 1]) == parity { tree[0][i * 2] }
@ -342,8 +345,6 @@ fn expand_tree(tree: &mut Vec<Vec<u32>>, parity: bool) {
expand_tree(tree, !parity); expand_tree(tree, !parity);
} }
fn print_tree(tree: &Vec<Vec<u32>>) { fn print_tree(tree: &Vec<Vec<i32>>) {
for layer in tree { println!("{:?}", tree);
println!("{:?}", layer);
}
} }