Compare commits

..

No commits in common. "87af9b73a0d5048020a72e99716940be9817c52d" and "553b9c19716d047d3aa8a85698092e90e7533391" have entirely different histories.

View File

@ -2,11 +2,9 @@ use std::io::{stdin,stdout,Write};
use rand::Rng; use rand::Rng;
use colored::*; use colored::*;
use console::Term; use console::Term;
use std::time::Instant;
fn output_board(board: &Vec<Vec<i64>>, state: &Vec<Vec<char>>, x_hovered: i64, y_hovered: i64) { fn output_board(board: &Vec<Vec<i64>>, state: &Vec<Vec<char>>, x_hovered: i64, y_hovered: i64) {
let mut output: String = "".to_string(); print!("{}[2J", 27 as char);
for y in 0..board.len() { for y in 0..board.len() {
for x in 0..board[y].len() { for x in 0..board[y].len() {
let background_color: u8; let background_color: u8;
@ -19,54 +17,52 @@ fn output_board(board: &Vec<Vec<i64>>, state: &Vec<Vec<char>>, x_hovered: i64, y
} }
if x == x_hovered as usize && y == y_hovered as usize { if x == x_hovered as usize && y == y_hovered as usize {
output.push_str(&"X".truecolor(0,0,0).on_truecolor(background_color,background_color,background_color).to_string()); print!("{}", "X".truecolor(0,0,0).on_truecolor(background_color,background_color,background_color));
} }
else if state[y][x] == 'u' { else if state[y][x] == 'u' {
if board[y][x] == -1 { if board[y][x] == -1 {
output.push_str(&"".truecolor(128,64,0).on_truecolor(background_color,background_color,background_color).to_string()); print!("{}","".truecolor(128,64,0).on_truecolor(background_color,background_color,background_color));
} }
else if board[y][x] == 0 { else if board[y][x] == 0 {
output.push_str(&" ".on_truecolor(background_color,background_color,background_color).to_string()); print!("{}"," ".on_truecolor(background_color,background_color,background_color));
} }
else if board[y][x] == 1 { else if board[y][x] == 1 {
output.push_str(&"1".truecolor(1,0,254).on_truecolor(background_color,background_color,background_color).to_string()); print!("{}", "1".truecolor(1,0,254).on_truecolor(background_color,background_color,background_color));
} }
else if board[y][x] == 2 { else if board[y][x] == 2 {
output.push_str(&"2".truecolor(1,127,1).on_truecolor(background_color,background_color,background_color).to_string()); print!("{}", "2".truecolor(1,127,1).on_truecolor(background_color,background_color,background_color));
} }
else if board[y][x] == 3 { else if board[y][x] == 3 {
output.push_str(&"3".truecolor(254,0,0).on_truecolor(background_color,background_color,background_color).to_string()); print!("{}", "3".truecolor(254,0,0).on_truecolor(background_color,background_color,background_color));
} }
else if board[y][x] == 4 { else if board[y][x] == 4 {
output.push_str(&"4".truecolor(1,0,128).on_truecolor(background_color,background_color,background_color).to_string()); print!("{}", "4".truecolor(1,0,128).on_truecolor(background_color,background_color,background_color));
} }
else if board[y][x] == 5 { else if board[y][x] == 5 {
output.push_str(&"5".truecolor(129,1,2).on_truecolor(background_color,background_color,background_color).to_string()); print!("{}", "5".truecolor(129,1,2).on_truecolor(background_color,background_color,background_color));
} }
else if board[y][x] == 6 { else if board[y][x] == 6 {
output.push_str(&"6".truecolor(0,128,129).on_truecolor(background_color,background_color,background_color).to_string()); print!("{}", "6".truecolor(0,128,129).on_truecolor(background_color,background_color,background_color));
} }
else if board[y][x] == 7 { else if board[y][x] == 7 {
output.push_str(&"7".truecolor(0,0,0).on_truecolor(background_color,background_color,background_color).to_string()); print!("{}", "7".truecolor(0,0,0).on_truecolor(background_color,background_color,background_color));
} }
else if board[y][x] == 8 { else if board[y][x] == 8 {
output.push_str(&"8".truecolor(128,128,128).on_truecolor(background_color,background_color,background_color).to_string()); print!("{}", "8".truecolor(128,128,128).on_truecolor(background_color,background_color,background_color));
} }
} }
else if state[y][x] == 'm' { else if state[y][x] == 'm' {
output.push_str(&"".truecolor(228,16,32).on_truecolor(background_color,background_color,background_color).to_string()); print!("{}", "m".truecolor(228,16,32).on_truecolor(background_color,background_color,background_color));
} }
else if state[y][x] == '?' { else if state[y][x] == '?' {
output.push_str(&"?".truecolor(0,0,0).on_truecolor(background_color,background_color,background_color).to_string()); print!("{}", "?".truecolor(0,0,0).on_truecolor(background_color,background_color,background_color));
} }
else { else {
output.push_str(&" ".on_truecolor(background_color,background_color,background_color).to_string()); print!("{}"," ".on_truecolor(background_color,background_color,background_color));
} }
} }
output.push_str("\n"); println!();
} }
print!("{}[2J", 27 as char);
println!("{}",output);
} }
fn input() -> String{ fn input() -> String{
@ -221,7 +217,7 @@ fn uncover(board: &Vec<Vec<i64>>, state: &mut Vec<Vec<char>>, x_hovered: usize,
} }
} }
fn detect_win(state: &Vec<Vec<char>>, number_of_nails: i64, start: Instant) { fn detect_win(state: &Vec<Vec<char>>, number_of_nails: i64) {
let mut number_of_covered_cells: i64 = 0; let mut number_of_covered_cells: i64 = 0;
for y in 0..state.len() { for y in 0..state.len() {
for x in 0..state[y].len() { for x in 0..state[y].len() {
@ -232,8 +228,6 @@ fn detect_win(state: &Vec<Vec<char>>, number_of_nails: i64, start: Instant) {
} }
if number_of_covered_cells == number_of_nails { if number_of_covered_cells == number_of_nails {
println!("Congratulations, you won!!!"); println!("Congratulations, you won!!!");
let end = std::time::Instant::now();
println!("In {:?}", end-start);
std::process::exit(0); std::process::exit(0);
} }
} }
@ -244,11 +238,9 @@ fn main() {
let mut board: Vec<Vec<i64>> = Vec::new(); let mut board: Vec<Vec<i64>> = Vec::new();
let mut state: Vec<Vec<char>> = Vec::new(); // u = uncovered, c = covered, m = marked let mut state: Vec<Vec<char>> = Vec::new(); // u = uncovered, c = covered, m = marked
let height: i64 = 8; let height: i64 = 10;
let width: i64 = 8; let width: i64 = 30;
let number_of_nails: i64 = 10; let number_of_nails: i64 = 35;
//let percentage_of_cells_are_nails: i64 = 15;
//let number_of_nails: i64 = ((percentage_of_cells_are_nails / 100) as i64) * ((width * height) as i64) as i64;
let mut x_hovered: i64 = 0; let mut x_hovered: i64 = 0;
let mut y_hovered: i64 = 0; let mut y_hovered: i64 = 0;
@ -264,8 +256,6 @@ fn main() {
//board[x as usize][y as usize] = -1; //board[x as usize][y as usize] = -1;
} }
} }
let start = std::time::Instant::now();
place_nails(&mut board, number_of_nails, width, height); place_nails(&mut board, number_of_nails, width, height);
determine_nails_in_range(&mut board); determine_nails_in_range(&mut board);
output_board(&board, &state, x_hovered, y_hovered); output_board(&board, &state, x_hovered, y_hovered);
@ -273,10 +263,10 @@ fn main() {
'gameloop: loop { 'gameloop: loop {
if let Ok(character) = stdout.read_char() { if let Ok(character) = stdout.read_char() {
match character { match character {
'w' | 'k' => if y_hovered > 0 { y_hovered -= 1 }, 'w' => if y_hovered > 0 { y_hovered -= 1 },
'a' | 'h' => if x_hovered > 0 { x_hovered -= 1}, 'a' => if x_hovered > 0 { x_hovered -= 1},
's' | 'j' => if y_hovered < height-1 { y_hovered += 1 }, 's' => if y_hovered < height-1 { y_hovered += 1 },
'd' | 'l' => if x_hovered < width-1 {x_hovered += 1}, 'd' => if x_hovered < width-1 {x_hovered += 1},
'u' => uncover(&board, &mut state, x_hovered as usize, y_hovered as usize, &mut alive), 'u' => uncover(&board, &mut state, x_hovered as usize, y_hovered as usize, &mut alive),
'm' => { 'm' => {
if state[y_hovered as usize][x_hovered as usize] == 'm' { if state[y_hovered as usize][x_hovered as usize] == 'm' {
@ -300,7 +290,7 @@ fn main() {
} }
if alive { if alive {
output_board(&board, &state, x_hovered, y_hovered); output_board(&board, &state, x_hovered, y_hovered);
detect_win(&state, number_of_nails, start); detect_win(&state, number_of_nails);
} }
else if alive == false { else if alive == false {
println!("GAME OVER!\nYou got Tetanus!"); println!("GAME OVER!\nYou got Tetanus!");
@ -318,6 +308,14 @@ fn main() {
println!(" ⠀⠀⠀⠀⠀⠀⠀⣼⣿⡟⠀⠀⠻⣿⣿⣧⠀⠀⠀⠀⠀"); println!(" ⠀⠀⠀⠀⠀⠀⠀⣼⣿⡟⠀⠀⠻⣿⣿⣧⠀⠀⠀⠀⠀");
println!(" ⠀⠀⠀⠀⠀⣠⣾⣿⠟⠁⠀⠀⠀⠘⢿⣿⣧/"); println!(" ⠀⠀⠀⠀⠀⣠⣾⣿⠟⠁⠀⠀⠀⠘⢿⣿⣧/");
println!(" ⠀⠀⠀⠀⢾⣿⠟⠁⠀⠀⠀⠀⠀⠀⠈⢻⣿⠇⠀⠀⠀"); println!(" ⠀⠀⠀⠀⢾⣿⠟⠁⠀⠀⠀⠀⠀⠀⠈⢻⣿⠇⠀⠀⠀");
println!(" ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⠄⠀ ");
println!("BEWARE:⢀⡴⠀⠀⠀⠀⠀⠀⠘⠛⢿⡟⠁⠀⠀ ");
println!(" ⠀⢀⣴⢿⣇⠀⠀⠲⣶⣤⣤⡄⠀⠈⣧⠀⠀⠀ ");
println!(" ⠀⠙⢷⣄⠀⣿⠃⠀⠀⠀⠀⢻⡀⠀⠀ ");
println!(" ⠀⠀⠀⠀⠀⠀⠙⣿⣏⠀⠀⠀⠀⠀⢸⡇⠀⠀ ");
println!(" ⠀⠀⠀⣿⠛⢷⠄⠀⠀⠀⠈⢿⠀ ");
println!(" ⠀⠀⠀⠀⠀⠀⢰⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ");
println!(" ⠀⠀⠀⠀⠀⠀⠘⠀⠀⠀⠀⠀⠀⠀⠀⠀ ");
break 'gameloop; break 'gameloop;
} }
} }