#include <ncurses.h>
#include <unistd.h>
#include <stdlib.h>
#include <vector>
struct Snake {
std::vector<COORD> body;
char direction;
};
void init(Snake &snake, COORD &food) {
srand((unsigned)time(NULL));
snake.body = {{10, 10}, {9, 10}, {8, 10}};
snake.direction = 'w';
food.x = rand() % 20 + 2;
food.y = rand() % 20 + 2;
}
void draw(Snake &snake, COORD &food) {
initscr();
noecho();
curs_set(0);
keypad(stdscr, TRUE);
while (1) {
mvaddch(food.y, food.x, '*');
for (auto &part : snake.body) {
mvaddch(part.y, part.x, '#');
}
switch (snake.direction) {
case 'w': --snake.body[0].y; break;
case 's': ++snake.body[0].y; break;
case 'a': --snake.body[0].x; break;
case 'd': ++snake.body[0].x; break;
}
if (snake.body[0].x == food.x && snake.body[0].y == food.y) {
snake.body.push_back(snake.body.back());
food.x = rand() % 20 + 2;
food.y = rand() % 20 + 2;
}
if (snake.body[0].x < 2 || snake.body[0].x > 20 || snake.body[0].y < 2 || snake.body[0].y > 20) {
break;
}
refresh();
sleep(1);
}
endwin();
}
int main() {
Snake snake;
COORD food;
init(snake, food);
draw(snake, food);
return 0;
}