Files
2021-01-18 03:28:18 +05:30

122 lines
3.9 KiB
Rust

use ncurses::*;
fn menu_window(mlines: i32, mcols: i32, lines: i32, cols: i32) -> WINDOW {
let menu_win: WINDOW;
let (starty, startx): (i32, i32);
starty = (mlines - lines) / 2;
startx = (mcols - cols) / 2;
menu_win = newwin(lines, cols, starty, startx);
box_(menu_win, 0, 0); // add default border
wrefresh(menu_win); // refreshes the new window to draw it
keypad(menu_win, true); // to use arrow keys
menu_win
}
fn destroy_window(win: WINDOW) {
wmove(win, 0, 0);
wclrtobot(win);
// wborder(win, 32, 32, 32, 32, 32, 32, 32, 32); // 32 is the ascii code for whitespace. this replaces all the window borders with whitespace
wrefresh(win); // refresh to remove the borders
delwin(win); // delete the window
}
pub fn pause_menu_control() -> i8 {
let mut ch: i32 = 0;
let choice: i8;
let (mut lines, mut cols): (i32, i32) = (0, 0);
let menu_win: WINDOW;
let menu_items = vec!["Resume", "Restart", "Exit"];
let menu_desc = vec!["Resume the game", "Restart the game", "Exit Game"];
let mut menu_highlight: usize = 0;
getmaxyx(stdscr(), &mut lines, &mut cols);
menu_win = menu_window(lines, cols, 10, 20);
loop {
for (menu_item_num, menu_item) in menu_items.iter().enumerate() {
if menu_item_num == menu_highlight {
wattron(menu_win, A_REVERSE());
}
mvwaddstr(menu_win, menu_item_num as i32 + 1, 1, &menu_item);
wattroff(menu_win, A_REVERSE());
wrefresh(menu_win);
}
mvwaddstr(menu_win, 7, 1, " ");
mvwaddnstr(menu_win, 7, 1, &menu_desc[menu_highlight], 18);
mvwaddstr(menu_win, 8, 1, &format!("{}", ch));
ch = wgetch(menu_win);
match ch {
KEY_UP | 107 => {
if menu_highlight > 0 {
menu_highlight -= 1
}
}
KEY_DOWN | 106 => {
if menu_highlight < 2 {
menu_highlight += 1
}
}
10 => {
choice = menu_highlight as i8;
break;
}
27 => {
choice = 2;
break;
}
_ => (),
}
}
destroy_window(menu_win);
choice
}
pub fn main_menu_control() -> i8 {
let mut ch: i32 = 0;
let choice: i8;
let (mut lines, mut cols): (i32, i32) = (0, 0);
let menu_win: WINDOW;
let menu_items = vec!["Start", "High Score", "Exit"];
let menu_desc = vec!["Start the game", "Check Highscrore", "Exit Game"];
let mut menu_highlight: usize = 0;
getmaxyx(stdscr(), &mut lines, &mut cols);
menu_win = menu_window(lines, cols, 10, 20);
loop {
for (menu_item_num, menu_item) in menu_items.iter().enumerate() {
if menu_item_num == menu_highlight {
wattron(menu_win, A_REVERSE());
}
mvwaddstr(menu_win, menu_item_num as i32 + 1, 1, &menu_item);
wattroff(menu_win, A_REVERSE());
wrefresh(menu_win);
}
// mvwaddstr(menu_win, 7, 1, " ");
wmove(menu_win, 7, 1);
wclrtoeol(menu_win);
box_(menu_win, 0, 0);
mvwaddnstr(menu_win, 7, 1, &menu_desc[menu_highlight], 18);
mvwaddstr(menu_win, 8, 1, &format!("{}", ch));
ch = wgetch(menu_win);
match ch {
KEY_UP | 107 => {
if menu_highlight > 0 {
menu_highlight -= 1
}
}
KEY_DOWN | 106 => {
if menu_highlight < 2 {
menu_highlight += 1
}
}
10 => {
choice = menu_highlight as i8;
break;
}
27 => {
choice = 2;
break;
}
_ => (),
}
}
destroy_window(menu_win);
choice
}