diff --git a/src/main.c b/src/main.c index 4715f0f..cbcb497 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,23 @@ +/* +Photonics helper main programm +Das main programm startet die sub programme der verschienene gruppen + +Autor: Noah Balsinger, Thomas Zwicker +Version: 0.1 +Datum: 04.12.2024 +Änderungen: +0.1 04.12.2024 Dokument erstellt +0.2 09.12.2024 Willkommensnachricht +0.3 10.12.2024 Meun hinzugefügt +0.4 11.12.2024 pipes + easter eggs hinzugefügt +0.5 12.12.2024 Windows version fix +0.6 13.12.2024 Pfeiltasten wurden hinzugefügt +*/ + #include #include #include +#include #include #ifdef __linux__ @@ -17,24 +34,10 @@ #include "Ramen_Physik.h" #include "test_prog.h" -/* -Photonics helper main programm -Das main programm startet die sub programme der verschienene gruppen - -Autor: Noah Balsinger, Thomas Zwicker -Version: 0.1 -Datum: 04.12.2024 -Änderungen: -0.1 04.12.2024 Dokument erstellt -0.2 09.12.2024 Willkommensnachricht -0.3 10.12.2024 Meun hinzugefügt -0.4 11.12.2024 pipes + easter eggs hinzugefügt -0.5 12.12.2024 Windows version fix -*/ #ifdef __linux__ int getch(){ - // getch funktion für linux (für windows in der conio lib) + // getch funktion für linux (für windows in der conio.h lib) int ch; struct termios oldattr, newattr; @@ -72,6 +75,7 @@ void get_terminal_size_windows(int argc, char **argv, int *width, int *height){ #endif void print_line(char line[100], int spaces, char color[5]){ + // funktion welche den text in einer farbe und mit space printet for(int i = 0; i < spaces; i++){ printf(" "); } @@ -86,11 +90,13 @@ void sleep_universal(int t){ #ifdef __linux__ sleep(t); #elif _WIN32 + // Sleep ist in Milisekunden Sleep(t * 1000); #endif } void print_blank_lines(int lines){ + // funktion die leere zeilen printet for(int i = 0; i < lines; i++){ printf("\n"); } @@ -165,21 +171,21 @@ void print_menu(int terminal_width, int terminal_height, int line){ print_line("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓", spaces, (0 <= line && line < 1) ? ";31": ";37"); print_line("┃ 1 Ramen Physik ┃", spaces, (0 <= line && line < 1) ? ";31": ";37"); print_line("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫", spaces, (0 <= line && line < 2) ? ";31": ";37"); - print_line("┃ Programm 2 ┃", spaces, (1 <= line && line < 2) ? ";31": ";37"); + print_line("┃ 2 Programm ┃", spaces, (1 <= line && line < 2) ? ";31": ";37"); print_line("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫", spaces, (1 <= line && line < 3) ? ";31": ";37"); - print_line("┃ Programm 3 ┃", spaces, (2 <= line && line < 3) ? ";31": ";37"); + print_line("┃ 3 Programm ┃", spaces, (2 <= line && line < 3) ? ";31": ";37"); print_line("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫", spaces, (2 <= line && line < 4) ? ";31": ";37"); - print_line("┃ Programm 4 ┃", spaces, (3 <= line && line < 4) ? ";31": ";37"); + print_line("┃ 4 Programm ┃", spaces, (3 <= line && line < 4) ? ";31": ";37"); print_line("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫", spaces, (3 <= line && line < 5) ? ";31": ";37"); - print_line("┃ Programm 5 ┃", spaces, (4 <= line && line < 5) ? ";31": ";37"); + print_line("┃ 5 Programm ┃", spaces, (4 <= line && line < 5) ? ";31": ";37"); print_line("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫", spaces, (4 <= line && line < 6) ? ";31": ";37"); - print_line("┃ Programm 6 ┃", spaces, (5 <= line && line < 6) ? ";31": ";37"); + print_line("┃ 6 Programm ┃", spaces, (5 <= line && line < 6) ? ";31": ";37"); print_line("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫", spaces, (5 <= line && line < 7) ? ";31": ";37"); - print_line("┃ Programm 7 ┃", spaces, (6 <= line && line < 7) ? ";31": ";37"); + print_line("┃ 7 Programm ┃", spaces, (6 <= line && line < 7) ? ";31": ";37"); print_line("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫", spaces, (6 <= line && line < 8) ? ";31": ";37"); - print_line("┃ Programm 8 ┃", spaces, (7 <= line && line < 8) ? ";31": ";37"); + print_line("┃ 8 Programm ┃", spaces, (7 <= line && line < 8) ? ";31": ";37"); print_line("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫", spaces, (7 <= line && line < 9) ? ";31": ";37"); - print_line("┃ Programm 9 ┃", spaces, (8 <= line && line < 9) ? ";31": ";37"); + print_line("┃ 9 Programm ┃", spaces, (8 <= line && line < 9) ? ";31": ";37"); print_line("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛", spaces, (8 <= line && line < 9) ? ";31": ";37"); } @@ -204,7 +210,6 @@ void get_terminal_size(int argc, char **argv, int *width, int *height){ #elif _WIN32 get_terminal_size_windows(argc, argv, width, height); #endif - } void get_terminal_size_init(int argc, char **argv, int *width, int *height){ @@ -230,12 +235,18 @@ void run_programm(int programm, int width, int height, bool *used){ case 2: return_code = test_gruppe_programmname(); break; case 3: return_code = test_gruppe_programmname(); break; case 4: return_code = test_gruppe_programmname(); break; + case 5: return_code = test_gruppe_programmname(); break; + case 6: return_code = test_gruppe_programmname(); break; + case 7: return_code = test_gruppe_programmname(); break; + case 8: return_code = test_gruppe_programmname(); break; + case 9: return_code = test_gruppe_programmname(); break; } switch (return_code) { case 10: used[programm] = 1; break; case 20: print_game_over(width, height); break; } + // ist dazu da um "\n" aus dem buffer zu entfernen! getchar(); } @@ -269,6 +280,10 @@ int main(int argc, char **argv){ bool run = true; bool *used = (bool[5]){0}; int start_time = time(0); + bool arrows = false; + if (argc >= 2 && strcmp(argv[1], "--ich-benutze-windows-und-bin-auf-die-pfeiltasten-angewiesen") == 0){ + arrows = true; + } // umlaute für windows #ifdef _WIN32 @@ -285,13 +300,21 @@ int main(int argc, char **argv){ // print wellcome message print_wellcome(width, height); + + // Hauptschleife while(run){ + // liest die terminal grösse ein get_terminal_size_init(argc, argv, &width, &height); + + // zeigt das menu an print_menu(width, height, line); + // liest die Tastatur aus char key_input = (char)getch(); + // verarbeitet die Tastatur eingabe switch (key_input) { + // vim movement case 'k': line--; break; case 'j': line++; break; case 'g': { @@ -302,34 +325,63 @@ int main(int argc, char **argv){ break; } case 'G': line = 8; break; - - case '?': print_help(); break; - // case 'p': pipes(); break; - case 'q': run = false; break; + case '?': print_help(); break; - case 'A': open(); break; - case 'B': open(); break; - case 'C': open(); break; - case 'D': open(); break; - case -32: open(); break; + // case 'p': pipes(); break; + // windows + case -32:{ + key_input = (char)getch(); + if (arrows){ + switch (key_input){ + case 72: line--; break; // printf("up\n"); + case 80: line++; break; // printf("down\n"); + // case 77: printf("right\n"); break; + // case 75: printf("left\n"); break; + } + } else{ + open(); + } + break; + } + // linux + case 27:{ + key_input = (char)getch(); + key_input = (char)getch(); + if (arrows){ + switch (key_input){ + case 65: line--; break; // printf("up\n"); + case 66: line++; break; // printf("down\n"); + // case 67: printf("right\n"); break; + // case 68: printf("left\n"); break; + } + } else { + open(); + } + break; + } + + // enter unter linux case '\n': run_programm(line, width, height, used); break; + // enter under windows case 13 : run_programm(line, width, height, used); break; + + // schnell start case '1': run_programm(0, width, height, used); break; case '2': run_programm(1, width, height, used); break; case '3': run_programm(2, width, height, used); break; case '4': run_programm(3, width, height, used); break; case '5': run_programm(4, width, height, used); break; - // default: printf(" Es wurde die Taste: %c gedrückt", key_input); getch(); + default: printf(" Es wurde die Taste: %i gedrückt\n", key_input); // getch(); } if(line < 0){line = 8;} if(line > 8){line = 0;} speed(width, height, &start_time, used); } - // zürück zum alten terminal (nur linux) + // zurück zum alten terminal (nur linux) #ifdef __linux__ system("tput rmcup"); #endif