add arrowkeys

pipes2game
MuedeHydra 2024-12-13 00:32:27 +01:00
parent f1ca9b4da6
commit e404159cbe
1 changed files with 87 additions and 35 deletions

View File

@ -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 <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdbool.h> #include <stdbool.h>
#include <string.h>
#include <time.h> #include <time.h>
#ifdef __linux__ #ifdef __linux__
@ -17,24 +34,10 @@
#include "Ramen_Physik.h" #include "Ramen_Physik.h"
#include "test_prog.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__ #ifdef __linux__
int getch(){ 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; int ch;
struct termios oldattr, newattr; struct termios oldattr, newattr;
@ -72,6 +75,7 @@ void get_terminal_size_windows(int argc, char **argv, int *width, int *height){
#endif #endif
void print_line(char line[100], int spaces, char color[5]){ 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++){ for(int i = 0; i < spaces; i++){
printf(" "); printf(" ");
} }
@ -86,11 +90,13 @@ void sleep_universal(int t){
#ifdef __linux__ #ifdef __linux__
sleep(t); sleep(t);
#elif _WIN32 #elif _WIN32
// Sleep ist in Milisekunden
Sleep(t * 1000); Sleep(t * 1000);
#endif #endif
} }
void print_blank_lines(int lines){ void print_blank_lines(int lines){
// funktion die leere zeilen printet
for(int i = 0; i < lines; i++){ for(int i = 0; i < lines; i++){
printf("\n"); 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("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓", spaces, (0 <= line && line < 1) ? ";31": ";37");
print_line("┃ 1 Ramen Physik ┃", 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("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫", 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("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫", 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("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫", 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("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫", 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("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫", 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("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫", 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("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫", 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("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫", 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"); 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 #elif _WIN32
get_terminal_size_windows(argc, argv, width, height); get_terminal_size_windows(argc, argv, width, height);
#endif #endif
} }
void get_terminal_size_init(int argc, char **argv, int *width, int *height){ 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 2: return_code = test_gruppe_programmname(); break;
case 3: return_code = test_gruppe_programmname(); break; case 3: return_code = test_gruppe_programmname(); break;
case 4: 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) { switch (return_code) {
case 10: used[programm] = 1; break; case 10: used[programm] = 1; break;
case 20: print_game_over(width, height); break; case 20: print_game_over(width, height); break;
} }
// ist dazu da um "\n" aus dem buffer zu entfernen!
getchar(); getchar();
} }
@ -269,6 +280,10 @@ int main(int argc, char **argv){
bool run = true; bool run = true;
bool *used = (bool[5]){0}; bool *used = (bool[5]){0};
int start_time = time(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 // umlaute für windows
#ifdef _WIN32 #ifdef _WIN32
@ -285,13 +300,21 @@ int main(int argc, char **argv){
// print wellcome message // print wellcome message
print_wellcome(width, height); print_wellcome(width, height);
// Hauptschleife
while(run){ while(run){
// liest die terminal grösse ein
get_terminal_size_init(argc, argv, &width, &height); get_terminal_size_init(argc, argv, &width, &height);
// zeigt das menu an
print_menu(width, height, line); print_menu(width, height, line);
// liest die Tastatur aus
char key_input = (char)getch(); char key_input = (char)getch();
// verarbeitet die Tastatur eingabe
switch (key_input) { switch (key_input) {
// vim movement
case 'k': line--; break; case 'k': line--; break;
case 'j': line++; break; case 'j': line++; break;
case 'g': { case 'g': {
@ -302,34 +325,63 @@ int main(int argc, char **argv){
break; break;
} }
case 'G': line = 8; break; case 'G': line = 8; break;
case 'q': run = false; break;
case '?': print_help(); break; case '?': print_help(); break;
// case 'p': pipes(); break; // case 'p': pipes(); break;
case 'q': run = false; break; // windows
case -32:{
case 'A': open(); break; key_input = (char)getch();
case 'B': open(); break; if (arrows){
case 'C': open(); break; switch (key_input){
case 'D': open(); break; case 72: line--; break; // printf("up\n");
case -32: open(); break; 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; case '\n': run_programm(line, width, height, used); break;
// enter under windows
case 13 : run_programm(line, width, height, used); break; case 13 : run_programm(line, width, height, used); break;
// schnell start
case '1': run_programm(0, width, height, used); break; case '1': run_programm(0, width, height, used); break;
case '2': run_programm(1, width, height, used); break; case '2': run_programm(1, width, height, used); break;
case '3': run_programm(2, width, height, used); break; case '3': run_programm(2, width, height, used); break;
case '4': run_programm(3, width, height, used); break; case '4': run_programm(3, width, height, used); break;
case '5': run_programm(4, 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 < 0){line = 8;}
if(line > 8){line = 0;} if(line > 8){line = 0;}
speed(width, height, &start_time, used); speed(width, height, &start_time, used);
} }
// zürück zum alten terminal (nur linux) // zurück zum alten terminal (nur linux)
#ifdef __linux__ #ifdef __linux__
system("tput rmcup"); system("tput rmcup");
#endif #endif