准备工作:在visual stuido配置图形库
这里使用easyx,EasyX Graphics Library for C++,
直接安装即可,会自动装到visual studo
之后写入需要的头文件,创建方向,蛇和食物的结构体
#include<stdio.h>
:标准输入输出库。#include<graphics.h>
:图形库,用于绘制图形界面。#include<conio.h>
:控制台输入输出库,用于键盘输入。#include<stdlib.h>
:标准库,包含随机数生成等函数。#define SNAKE_SIZE 500
:定义蛇的最大长度。- 方向用枚举
struct Snake
:定义蛇的结构体,包含蛇的长度size、方向dir,、速度speed和坐标数组coor[SNAKE_SIZE]
。struct Food
:定义食物的结构体,包含食物的坐标、半径、是否存在的标志和颜色struct Food
:定义食物的结构体,包含食物的坐标、半径、是否存在的标志和颜色- 之后是初始化
-
void Gameinit() { initgraph(640, 480, SHOWCONSOLE); snake.size = 3; srand(GetTickCount()); snake.dir = right; snake.speed = 10; for (int i = 0; i < snake.size; i++) { snake.coor[i].x = 40 - 10 * i; snake.coor[i].y = 10; } food.x = rand() % 640; food.y = rand() % 480; food.color = RGB(rand() % 256, rand() % 256, rand() % 256); food.r = rand() % 10 + 5; food.flag = true; }
initgraph(640, 480, SHOWCONSOLE)
:初始化图形窗口,大小为640x480,显示控制台。- 初始化蛇的属性,包括长度、方向、速度和初始坐标。
- 随机生成食物的坐标、颜色和半径,并设置食物存在标志。
srand(GetTickCount());
被用来初始化随机数生成器,以便在生成食物的位置、颜色和半径时能够得到不同的随机值BeginBatchDraw()
:开始批量绘制。批量绘制可以提高绘图效率,减少闪烁。setbkcolor(RGB(22, 14, 35))
:设置背景颜色为深蓝色(RGB值为22, 14, 35)。cleardevice()
:清空整个绘图设备,将背景颜色填充到整个窗口。setfillcolor(RED)
:设置填充颜色为红色- 使用
for
循环遍历蛇的身体坐标数组snake.coor
。 solidcircle(snake.coor[i].x, snake.coor[i].y, 5)
:在每个坐标点绘制一个半径为5的实心圆,表示蛇的身体部分。if (food.flag)
:检查食物是否存在。solidcircle(food.x, food.y, food.r)
:在食物的坐标点绘制一个半径为food.r
的实心圆,表示食物。EndBatchDraw()
:结束批量绘制,将所有绘图操作一次性提交到图形窗口。for
循环从蛇的尾部开始,将每个部分的坐标更新为前一个部分的坐标。这样,蛇的身体就会依次向前移动,更新蛇的头部坐标- 检查蛇头是否接触到食物,如果接触则增加蛇的长度并重新生成食物
- 检查是否有键盘输入(数字是键值),并根据输入更新蛇的方向
-
- 初始化游戏。
- 进入主循环,不断更新蛇的位置、处理键盘输入、检查是否吃到食物并绘制游戏画面。
Sleep(100)
:控制游戏帧率,每帧暂停100毫秒。- 运行结果
ps:键盘输入没反应的,如果是win11的,请进入win11的系统设置—>隐私与安全性—>开发者选项—>终端,将里面的内容改成windows控制台主机
新人第一次写博客,如有纰漏还请见谅