Browse Source

添加 'Snake'

lstlmh 3 years ago
parent
commit
52660e7420
1 changed files with 167 additions and 0 deletions
  1. 167 0
      Snake

+ 167 - 0
Snake

@@ -0,0 +1,167 @@
+#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;
+}