diff --git a/src/main.c b/src/main.c index 99ce08a..f99707d 100644 --- a/src/main.c +++ b/src/main.c @@ -1,12 +1,15 @@ #include #include +#include #ifdef __linux__ #include #include + #include #elif _WIN32 #include #include + #include #endif // import sub programme @@ -44,11 +47,12 @@ void get_terminal_size_windows(int argc, char **argv, int *width, int *height){ } #endif -void print_wellcome_line(char line[100], int spaces){ +void print_line(char line[100], int spaces, char color[5]){ for(int i = 0; i < spaces; i++){ printf(" "); } - printf("%s\n", line); + printf("\033[1%sm %s \033[0m\n", color, line); + // printf("%s\n", line); } void clear_terminal(){ @@ -67,25 +71,29 @@ void sleep_universal(int t){ #endif } +void print_blank_lines(int lines){ + for(int i = 0; i < lines; i++){ + printf("\n"); + } +} + void print_wellcome(int terminal_width, int terminal_height){ clear_terminal(); - for(int i = 0; i < (terminal_height - 10) / 2; i++){ - printf("\n"); - } + print_blank_lines((terminal_height - 10) / 2); int spaces = (terminal_width - 83) / 2; - print_wellcome_line("__ ___ _ _ _ ", spaces); - print_wellcome_line("\\ \\ / (_) | | | _____ _ __ ___ _ __ ___ ___ _ __ _____ _ _ __ ___ ", spaces); - print_wellcome_line(" \\ \\ /\\ / /| | | | |/ / _ \\| '_ ` _ \\| '_ ` _ \\ / _ \\ '_ \\ |_ / | | | '_ ` _ \\", spaces); - print_wellcome_line(" \\ V V / | | | | < (_) | | | | | | | | | | | __/ | | | / /| |_| | | | | | | ", spaces); - print_wellcome_line(" \\_/\\_/ |_|_|_|_|\\_\\___/|_| |_| |_|_| |_| |_|\\___|_| |_| /___|\\__,_|_| |_| |_| ", spaces); - print_wellcome_line(" ", spaces); - print_wellcome_line(" ____ _ _ _ _ _ _ _ __ ", spaces); - print_wellcome_line("| _ \\| |__ ___ | |_| |__ ___ _ __ (_) ___ ___ | | | | ___| |/ _| ___ _ __ ", spaces); - print_wellcome_line("| |_) | '_ \\ / _ \\| __| '_ \\ / _ \\| '_ \\| |/ __/ __| | |_| |/ _ \\ | |_ / _ \\ '__| ", spaces); - print_wellcome_line("| __/| | | | (_) | |_| | | | (_) | | | | | (__\\__ \\ | _ | __/ | _| __/ | ", spaces); - print_wellcome_line("|_| |_| |_|\\___/ \\__|_| |_|\\___/|_| |_|_|\\___|___/ |_| |_|\\___|_|_| \\___|_| ", spaces); + print_line("__ ___ _ _ _ ", spaces, ";37"); + print_line("\\ \\ / (_) | | | _____ _ __ ___ _ __ ___ ___ _ __ _____ _ _ __ ___ ", spaces, ";37"); + print_line(" \\ \\ /\\ / /| | | | |/ / _ \\| '_ ` _ \\| '_ ` _ \\ / _ \\ '_ \\ |_ / | | | '_ ` _ \\", spaces, ";37"); + print_line(" \\ V V / | | | | < (_) | | | | | | | | | | | __/ | | | / /| |_| | | | | | | ", spaces, ";37"); + print_line(" \\_/\\_/ |_|_|_|_|\\_\\___/|_| |_| |_|_| |_| |_|\\___|_| |_| /___|\\__,_|_| |_| |_| ", spaces, ";37"); + print_line(" ", spaces, ";37"); + print_line(" ____ _ _ _ _ _ _ _ __ ", spaces, ";37"); + print_line("| _ \\| |__ ___ | |_| |__ ___ _ __ (_) ___ ___ | | | | ___| |/ _| ___ _ __ ", spaces, ";37"); + print_line("| |_) | '_ \\ / _ \\| __| '_ \\ / _ \\| '_ \\| |/ __/ __| | |_| |/ _ \\ | |_ / _ \\ '__| ", spaces, ";37"); + print_line("| __/| | | | (_) | |_| | | | (_) | | | | | (__\\__ \\ | _ | __/ | _| __/ | ", spaces, ";37"); + print_line("|_| |_| |_|\\___/ \\__|_| |_|\\___/|_| |_|_|\\___|___/ |_| |_|\\___|_|_| \\___|_| ", spaces, ";37"); sleep_universal(3); @@ -104,10 +112,81 @@ void print_wellcome(int terminal_width, int terminal_height){ */ } +void print_game_over(int terminal_width, int terminal_height){ + clear_terminal(); + print_blank_lines((terminal_height - 5) / 2); + int spaces = (terminal_width - 50) / 2; + + print_line(" ____ ", spaces, ";37"); + print_line(" / ___| __ _ _ __ ___ ___ _____ _____ _ __ ", spaces, ";37"); + print_line("| | _ / _` | '_ ` _ \\ / _ \\ / _ \\ \\ / / _ \\ '__| ", spaces, ";37"); + print_line("| |_| | (_| | | | | | | __/ | (_) \\ V / __/ | ", spaces, ";37"); + print_line(" \\____|\\__,_|_| |_| |_|\\___| \\___/ \\_/ \\___|_| ", spaces, ";37"); + + print_blank_lines(2); + print_line("Press a key to contine: ", spaces, ";37"); + getchar(); + +} + +void print_menu(int terminal_width, int terminal_height, int line){ + clear_terminal(); + print_blank_lines((terminal_height - 11) / 2); + int spaces = (terminal_width - 41) / 2; + + #ifdef __linux__ + print_line("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓", spaces, (0 <= line && line < 1) ? ";31": ";37"); + print_line("┃ Programm 1 ┃", spaces, (0 <= line && line < 1) ? ";31": ";37"); + print_line("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫", spaces, (0 <= line && line < 2) ? ";31": ";37"); + print_line("┃ Programm 1 ┃", spaces, (1 <= line && line < 2) ? ";31": ";37"); + print_line("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫", spaces, (1 <= line && line < 3) ? ";31": ";37"); + print_line("┃ Programm 1 ┃", spaces, (2 <= line && line < 3) ? ";31": ";37"); + print_line("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫", spaces, (2 <= line && line < 4) ? ";31": ";37"); + print_line("┃ Programm 1 ┃", spaces, (3 <= line && line < 4) ? ";31": ";37"); + print_line("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫", spaces, (3 <= line && line < 5) ? ";31": ";37"); + print_line("┃ ┃", spaces, (4 <= line && line < 5) ? ";31": ";37"); + print_line("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛", spaces, (4 <= line && line < 5) ? ";31": ";37"); + #elif _WIN32 + print_line("+---------------------------------------+", spaces, (0 <= line && line < 1) ? ";31": ";37"); + print_line("| Programm 1 |", spaces, (0 <= line && line < 1) ? ";31": ";37"); + print_line("+---------------------------------------+", spaces, (0 <= line && line < 2) ? ";31": ";37"); + print_line("| Programm 1 |", spaces, (1 <= line && line < 2) ? ";31": ";37"); + print_line("+---------------------------------------+", spaces, (1 <= line && line < 3) ? ";31": ";37"); + print_line("| Programm 1 |", spaces, (2 <= line && line < 3) ? ";31": ";37"); + print_line("+---------------------------------------+", spaces, (2 <= line && line < 4) ? ";31": ";37"); + print_line("| Programm 1 |", spaces, (3 <= line && line < 4) ? ";31": ";37"); + print_line("+---------------------------------------+", spaces, (3 <= line && line < 5) ? ";31": ";37"); + print_line("| |", spaces, (4 <= line && line < 5) ? ";31": ";37"); + print_line("+---------------------------------------+", spaces, (4 <= line && line < 5) ? ";31": ";37"); + #endif + +} + +#ifdef __linux__ +int getch(){ + int ch; + struct termios oldattr, newattr; + + tcgetattr(STDIN_FILENO, &oldattr); + newattr = oldattr; + newattr.c_lflag &= ~ICANON; + newattr.c_lflag &= ~ECHO; + newattr.c_cc[VMIN] = 1; + newattr.c_cc[VTIME] = 0; + tcsetattr(STDIN_FILENO, TCSANOW, &newattr); + ch = getchar(); + tcsetattr(STDIN_FILENO, TCSANOW, &oldattr); + + return ch; +} +#endif + int main(int argc, char **argv){ int width = 0; int height = 0; int os = 0; // 0 == None, 1 = linux, 2 = windows + int line = 0; + bool run = true; // Terminal grösse herauslesen #ifdef __linux__ @@ -130,7 +209,21 @@ int main(int argc, char **argv){ // print wellcome message print_wellcome(width, height); + // print_game_over(width, height); + print_menu(width, height, line); + while(run){ + char key_input = (char)getch(); + switch (key_input) { + case 'k': line--; break; + case 'j': line++; break; + + case 'q': run = false; + } + if(line < 0){line = 4;} + if(line > 4){line = 0;} + print_menu(width, height, line); + } // zürück zum alten terminal (nur linux) system("tput rmcup");