当前位置:网站首页>C语言贪吃蛇
C语言贪吃蛇
2022-06-22 15:03:00 【小木荣】
一、说明
- 编译环境:vs 2019
- 需要安装 eazyx(几秒钟就行)
- 代码注释详细
- 成像图

二、制作思路
- 界面
大小、颜色 - 蛇的初始化
蛇身形状、长度,出现在地图的位置,一开始往哪个方向移动 - 食物的随机出现
播种:srand((unsigned int)time(NULL));
随机函数:rand() - 蛇的行动操作(移动和吃食物)
WASD
不能直接走与自身方向相反的方向,如:
向右走时不能向左 - 蛇死亡条件
撞边界、撞自己 - 得分的计算
吃食物得分,打印在界面 - 如何画蛇、画食物
三、代码
//在代码中取消 Unicode 编码的宏定义,让后续编译都以 MBCS 编码进行
#undef UNICODE
#undef _UNICODE
#include<stdio.h>
#include<conio.h> // _getch _kbhit
#include<time.h>
#include<graphics.h> //需安装easyX
//界面大小,可直接修改
#define M 600
#define N 400
typedef struct {
int x, y;
}point;//坐标xy,与数学的坐标略有不同
struct snake {
point xy[100];
int position;
int lenth;
}snake;
struct food {
int flag = 0;//判断食物是否存在
point fdxy;
int grade = 0;
}food;
enum position {
up, down, left, right };//枚举
//蛇,初始化蛇的位置
void startsnake()
{
//蛇头
snake.xy[0].x = 20;
snake.xy[0].y = 0;
snake.xy[1].x = 10;
snake.xy[1].y = 0;
snake.xy[2].x = 0;
snake.xy[2].y = 0;
//蛇初始化方向
snake.position = right;
snake.lenth = 3;
}
//画蛇(要安装easy_X),颜色会不断变化
void drawsnake()
{
for (int i = 0; i < snake.lenth; i++)
{
setfillcolor(RGB(rand() % 255, rand() % 255, rand() % 255));
fillrectangle(snake.xy[i].x, snake.xy[i].y, snake.xy[i].x + 10, snake.xy[i].y + 10);
}
}
void movesnake()
{
//蛇身往前移动一格
for (int i = snake.lenth - 1; i > 0; i--)
{
snake.xy[i].x = snake.xy[i - 1].x;
snake.xy[i].y = snake.xy[i - 1].y;
}
//蛇头方向移动
switch (snake.position)
{
case up:
snake.xy[0].y = snake.xy[0].y - 10; break;
case down:
snake.xy[0].y = snake.xy[0].y + 10; break;
case left:
snake.xy[0].x = snake.xy[0].x - 10; break;
case right:
snake.xy[0].x = snake.xy[0].x + 10; break;
}
}
//随机生成食物
void showfood()
{
food.fdxy.x = rand() % (M/10) * 10;//0~590
food.fdxy.y = rand() % (N/10) * 10;//0~390
//循环用于判断是否与蛇重合
for (int i = 0; i < snake.lenth; i++)
{
if (snake.xy[i].x == food.fdxy.x && snake.xy[i].y == food.fdxy.y)
{
food.fdxy.x = rand() % 60 * 10;
food.fdxy.y = rand() % 40 * 10;
}
}
}
//
void drawfood()
{
setfillcolor(RGB(rand() % 255, rand() % 255, rand() % 255));
fillrectangle(food.fdxy.x, food.fdxy.y, food.fdxy.x + 10, food.fdxy.y + 10);
}
void eatfood()
{
if (snake.xy[0].x == food.fdxy.x && snake.xy[0].y == food.fdxy.y)
{
snake.lenth++;
food.flag = 0;//这里看下main函数
food.grade += 10;
}
}
//键盘操作
void keydown()
{
char dqown = _getch();
switch (dqown)
{
case 'W':
case 'w':
if (snake.position != down)
snake.position = up;
break;
case 'A':
case 'a':
if (snake.position != right)
snake.position = left;
break;
case 'S':
case 's':
if (snake.position != up)
snake.position = down;
break;
case 'D':
case 'd':
if (snake.position != left)
snake.position = right;
break;
case '9':Sleep(5000);//按下 9 暂停 5 秒 (可自行更改)
}
}
void showgrade()
{
char Grade[20] = "";
sprintf_s(Grade, "grade:%d", food.grade);
outtextxy(250, 20, Grade);
}
//撞墙则死,碰自己不死
void dead()
{
if (snake.xy[0].x == M || snake.xy[0].x < 0 || snake.xy[0].y < 0 || snake.xy[0].y == N)
{
char over[20] = "Game Over!";
outtextxy(250, 50, over);
system("pause");
exit(0);
}
}
int main()
{
srand((unsigned int)time(NULL));//播种
initgraph(M, N); //画面大小,可自行随意更改
setbkcolor(RGB(110, 120, 119));//背景颜色
//初始化蛇
startsnake();
drawsnake();
while (1)
{
cleardevice();//清屏
movesnake();
drawsnake();
if (food.flag == 0)//判断是否生成食物
{
showfood();
food.flag = 1;
}
drawfood();
if (_kbhit())//判断是否键盘操作
{
keydown();
}
eatfood();
showgrade();
dead();
Sleep(100);//这个可以看作蛇的移动速度
}
return 0;
}
边栏推荐
猜你喜欢

Cve-2022-0847 (privilege lifting kernel vulnerability)

在JFlash中添加未知类型的单片机

(pytorch advanced path 2) word embedding and position embedding
![[Shangshui Shuo series] day three - VIDEO](/img/42/0911fee2a36f6dda345a571a31acd5.png)
[Shangshui Shuo series] day three - VIDEO

Ironsource Luna offers a limited time discount for Apple search ads and enjoys 3 months of free service upon registration

Dear students, don't read the textbooks any more. Just read this one for the complexity of time
New design of databend SQL planner

SAP 中的 ABAP 查询教程:SQ01、SQ02、SQ03-017

Navicat Premium 连接Oracle 数据库(图文教程)

Jenkins automatically triggers compilation by checking code submissions
随机推荐
84.(cesium篇)cesium模型在地形上运动
解决mysql远程登录报权限问题
【山大会议】WebRTC基础之对等体连接
POD 类型
Gbase "library" special training of innovation and application Committee of Beijing fintech Industry Alliance
Luogu p2466 [sdoi2008] Sue's small ball solution
Solve the problem of MySQL remote login permission
SAP ABAP 子屏幕教程:在 SAP 中调用子屏幕-010
Batch export excel zip using zipfile, openpyxl and flask
How safe is the new bond
畅享高性能计算!天翼云HPC解决方案来了
Odoo local document function development record
How to open a futures account? Is it safe to open an online futures account?
Simulation of vector
wallys/WiFi6 MiniPCIe Module 2T2R 2×2.4GHz 2x5GHz
Simulation Implementation of string
SAP ABAP 数据字典教程 SE11:表、锁定对象、视图和结构 -03
【山大会议】项目初始化
Linux安装mysql
uni开发微信小程序自定义相机自动检测(人像+身份证)