summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPreston Pan <preston@nullring.xyz>2023-02-06 01:10:44 -0800
committerPreston Pan <preston@nullring.xyz>2023-02-06 01:10:44 -0800
commita94deb2cb2f958fcfaee67481db6fc4e4ba5d1d0 (patch)
treec9161ebfca80e3959c9edfa65ab66cccff74d501
parent49179e6f7e9dacc8ec6d6165f72e5ed62ec0b0d0 (diff)
parentbc9372c5ceffc7229afa5963e0227a1d3c0a15d9 (diff)
Merge branch 'master' of ssh://aberrantflux.xyz:/home/git/repo/public/snake3
Merge.
-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");