forked from zwickethomas/Photonics-Helfer
		
	add arrowkeys
This commit is contained in:
		
							parent
							
								
									f1ca9b4da6
								
							
						
					
					
						commit
						e404159cbe
					
				
							
								
								
									
										120
									
								
								src/main.c
									
									
									
									
									
								
							
							
						
						
									
										120
									
								
								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 <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
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user