diff options
author | June McEnroe <june@causal.agency> | 2021-01-29 02:17:14 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2021-01-29 02:17:14 -0500 |
commit | 97389401cb0a346be6fc08170138b6e19d26940e (patch) | |
tree | b75dad74a29f6fc87a0befde3dec6f6ad7803069 | |
parent | Add snake game (diff) | |
download | play-97389401cb0a346be6fc08170138b6e19d26940e.tar.gz play-97389401cb0a346be6fc08170138b6e19d26940e.zip |
Don't let the snake snap its own neck
-rw-r--r-- | snake.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/snake.c b/snake.c index 3eb28f5..4b36ff9 100644 --- a/snake.c +++ b/snake.c @@ -175,14 +175,19 @@ static void input(void) { ch = getch(); nodelay(stdscr, true); } + int dy = head.dy; + int dx = head.dx; switch (ch) { - break; case 'h': case KEY_LEFT: head.dy = 0; head.dx = -1; - break; case 'j': case KEY_DOWN: head.dy = +1; head.dx = 0; - break; case 'k': case KEY_UP: head.dy = -1; head.dx = 0; - break; case 'l': case KEY_RIGHT: head.dy = 0; head.dx = +1; + break; case 'h': case KEY_LEFT: dy = 0; dx = -1; + break; case 'j': case KEY_DOWN: dy = +1; dx = 0; + break; case 'k': case KEY_UP: dy = -1; dx = 0; + break; case 'l': case KEY_RIGHT: dy = 0; dx = +1; break; case 'q': over = "You are satisfied."; break; case ERR: exit(EXIT_FAILURE); } + if (dy == -head.dy && dx == -head.dx) return; + head.dy = dy; + head.dx = dx; } uint playSnake(void) { |