From 4c3ff7608d951070792d7f128515ec8e4c20a97f Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Mon, 7 Jun 2021 14:53:30 +0200 Subject: [PATCH] Immediate and invisible input --- main.c | 63 +++++++++++++++++++++++++++++----------------------------- main.h | 3 +++ 2 files changed, 35 insertions(+), 31 deletions(-) diff --git a/main.c b/main.c index a572dde..58c4a0d 100644 --- a/main.c +++ b/main.c @@ -40,50 +40,51 @@ void init_board(board *b) { void game_start() { printf("\e[?1049h"); + struct termios oldtio, newtio; + tcgetattr(STDIN_FILENO, &oldtio); + newtio = oldtio; + newtio.c_lflag &= ~(ICANON | ECHO); + tcsetattr(STDIN_FILENO, TCSANOW, &newtio); board *b = new_board(); game_loop(b); print_score(b); free_board(b); printf("\e[?1049l"); + tcsetattr(STDIN_FILENO, TCSANOW, &oldtio); +} + +enum direction get_input() +{ + switch(fgetc(stdin)) { + case 'a': + return west; + case 's': + return south; + case 'w': + return north; + case 'd': + return east; + case 'q': + return quit; + default: + return get_input(); + } } void game_loop(board *b) { - char c[16]; - int d; - bool r = true; while(move_possible_any(b)) { place_new_piece(b); print_board(b); - INPUT: - printf("Make a move:\n"); - fgets(c, sizeof(c), stdin); - switch(c[0]) { - case 'a': - d = west; - break; - case 's': - d = south; - break; - case 'w': - d = north; - break; - case 'd': - d = east; - break; - case 'q': - r = false; + while(true) { + enum direction d = get_input(); + + if (d == quit) { + return; + } else if(move_possible(b, d)) { + make_move(b, d); break; - default: - printf("Invalid move: %c\n", c[0]); - goto INPUT; - } - if(!r) - return; - if(!move_possible(b, d)) { - printf("Move not possible: %c\n", c[0]); - goto INPUT; + } } - make_move(b, d); } } diff --git a/main.h b/main.h index 76a50d7..9068990 100644 --- a/main.h +++ b/main.h @@ -6,6 +6,8 @@ #include #include #include +#include +#include typedef struct board board; typedef unsigned int uint; @@ -16,6 +18,7 @@ enum direction { south, west, east, + quit, }; struct board { -- 2.44.0