123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <graphics.h>
- /*
- 复习:结构体、循环、函数、数组、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;
- }
|