#include #include #include #include /* 复习:结构体、循环、函数、数组、eaxyx eaxyx:图形界面库 */ //做界面1,创建一个图形界面窗口 //🐍的方向 //🐍的速度 //🐍的结构 #define SNAKE_NUM 500 //蛇的最大节数 enum DIR //表示🐍的方向 { UP, DOWN, LEFT, RIGHT, }; struct Snake { int size; //🐍的节数 int dir; //🐍的方向 int speed; //🐍的速度 POINT coor[SNAKE_NUM]; //坐标 }snake; //数据的初始化 void GameInit() { //init 初始化 graph 图形化窗口 SHOWCONSOLE 显示控制台 initgraph(640, 480); //初始化🐍 snake.size = 3; snake.speed = 10; snake.dir = RIGHT; //初始化定义🐍的方向为RIGHT for (int i = snake.size - 1; i >= 0; i--) { snake.coor[i].x = 40 - 10 * i; snake.coor[i].y = 10; //printf("?%d %d", snake.coor[i].x, snake.coor[i].y); } //snake.coor[0].x = 40; //snake.coor[0].y = 10; //snake.coor[1].x = 30; //snake.coor[1].y = 10; //snake.coor[2].x = 20; //snake.coor[2].y = 10; } void GameDraw() { //双缓冲绘图 BeginBatchDraw(); //设置背景颜色 setbkcolor(RGB(85, 0, 255)); cleardevice(); //绘制🐍 //setfillcolor() for (int i = 0; i < snake.size; i++) { solidcircle(snake.coor[i].x, snake.coor[i].y, 5); } EndBatchDraw(); } //移动🐍 void snakeMove() { //移动是坐标发生改变 //让身体跟着头移动 for (int i = snake.size - 1; i > 0; i--) { snake.coor[i] = snake.coor[i - 1]; } switch (snake.dir) { case UP: snake.coor[0].y -= snake.speed; if (snake.coor[0].y <= 0)//头跑出了上边界 { snake.coor[0].y = 640; } break; case DOWN: snake.coor[0].y += snake.speed; break; case LEFT: snake.coor[0].x -= snake.speed; break; case RIGHT: snake.coor[0].x += snake.speed; break; } } //通过按键盘改变🐍的移动方向 void keyControl() { //判断有没有按键盘,如果有按键,就返回真 if (_kbhit()) { //72 80 75 77 方向键上下左右键值 switch (_getch()) { case 'w': case 'W': case 72: if (snake.dir != DOWN) { snake.dir = UP; } break; case 's': case 'S': case 80: if (snake.dir != UP) { snake.dir = DOWN; } break; case 'a': case 'A': case 75: if (snake.dir != RIGHT) { snake.dir = LEFT; } break; case 'd': case 'D': case 77: if (snake.dir != LEFT) { snake.dir = RIGHT; } break; } } } int main() { GameInit(); while (1) { GameDraw(); snakeMove(); keyControl(); Sleep(20); } return 0; }