summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--snake.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/snake.c b/snake.c
index 31e164d..3156022 100644
--- a/snake.c
+++ b/snake.c
@@ -3,29 +3,37 @@
#include <time.h>
#include <pthread.h>
#include <signal.h> //handling ctrl-c
+#include <sys/ioctl.h> //terminal size
#include "vector.h"
#include "snake.h"
#include "conio.h"
volatile sig_atomic_t INT_CTRL_C = 0;
-// unsafe functions like printf cannot be called in async interrupt handler
+//unsafe functions like printf cannot be called in async interrupt handler
void interrupt_handler(int sig) {
INT_CTRL_C = 1;
}
-const int boardSize = 12;
+int boardSize = 15;
const int updateInterval = 300000000L;
vectorp_t snakePositions;
vector_t foodPos;
vector_t lastMoveDir;
int main(int argc, char **argv) {
- printf("\e[?25l"); /* hide cursor */
-
+ //get terminal size
+ struct winsize win;
+ ioctl(fileno(stdout), TIOCGWINSZ, &win);
+ int width = (int)(win.ws_col);
+ int height = (int)(win.ws_row);
+ //multiplied by 2 to account for the fact that the board is twice as wide as high
+ int smallestAxis = width / 2 < height ? width / 2 : height;
+ boardSize = smallestAxis < boardSize ? smallestAxis : boardSize;
+ //hide cursor
+ printf("\e[?25l");
//make a new thread handling interrupts
signal(SIGINT, interrupt_handler);
-
//init values
snakePositions = init_vectorp(malloc(5 * sizeof(vector_t)), 5);
snakePositions.vectors[0] = init_vector(5, 5);
@@ -50,7 +58,7 @@ int main(int argc, char **argv) {
pthread_create(&listenerID, NULL, get_dir_loop, &threadArg);
//main game logic loop
while(1) {
- // handle ctrl-c interrupt
+ //handle ctrl-c interrupt
if (INT_CTRL_C) {
//unhide cursor
printf("\e[?25h");