C语言实现贪吃蛇游戏代码分享
发表于:2026-11-05 作者:千家信息网编辑
千家信息网最后更新 2026年11月05日,本篇内容主要讲解"C语言实现贪吃蛇游戏代码分享",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C语言实现贪吃蛇游戏代码分享"吧!贪吃蛇是个非常经典的游戏,用
千家信息网最后更新 2026年11月05日C语言实现贪吃蛇游戏代码分享
本篇内容主要讲解"C语言实现贪吃蛇游戏代码分享",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C语言实现贪吃蛇游戏代码分享"吧!
贪吃蛇是个非常经典的游戏,用C语言来实现也是一个好玩的事情。这个游戏我写完后放在知乎,竟然点赞的人数超级多。我觉得大家喜欢,一个方面是因为写得简单,大家都能看得懂,一个可扩展性还是非常强的。
我试了说一下这个代码 核心的三个函数
menu();
setup();
draw();
menu用来设置菜单,也就是我们一运行看到的那个。setup用来设置参数,我们需要设置高度和宽度,还有分数,食物的位置。draw也就是画,也就是画整个画面。
还有一个枚举类型 这个结构体用来设置蛇的几个状态,我觉得这个也是面向对象编程的一个思想,把蛇的状态都封装成一个枚举类型。
typedef enum
{
STOP = 0,
LEFT,
RIGHT,
UP,
DOWN
}Direction;
还有
/*判断贪吃蛇的长度*/
void logic()
这个函数,这个函数应该是整个贪吃蛇的精髓了,要理解代码怎么把蛇给连接起来。用了点巧妙的东西。
来看这里面的关键代码
/*把上一个位置记下*/
int lastX = tailX[0];
int lastY = tailY[0];
int last2X, last2Y;
/*重新获取当前的位置*/
tailX[0]=x;
tailY[0]=y;
int i=0;
/*遍历整条蛇的长度 把 0 的位置空出来,其余蛇的位置往后面的空间移动*/
for(i=1; i {
last2X = tailX[i];
last2Y = tailY[i];
tailX[i]=lastX;
tailY[i]=lastY;
lastX = last2X;
lastY = last2Y;
}
lastX lastY 用来存上一次的蛇头的位置。后面的 for 循环,通过tail 蛇的长度,把蛇上个状态给保存到数组tailX tailY里面。
完整代码
#include
#include
#include
#include
#include
#include /*键盘输入获取*/
bool gameOver;
bool stop = false;
bool hit = false;
/*游戏的边框大小*/
const int width = 50;
const int height = 20;
/*蛇的坐标,食物的坐标还有分数*/
int x,y,fruitX,fruitY,score;
/*蛇每个点的坐标*/
int tailX[200],tailY[200];
/*蛇的默认长度*/
int ntail=3;
typedef enum
{
STOP = 0,
LEFT,
RIGHT,
UP,
DOWN
}Direction;
Direction Dir;
/*开始菜单*/
void menu()
{
int a;
printf("------------------------------------------------------------------\n");
printf("| 贪吃蛇游戏 |\n");
printf("| 1) 新游戏 |\n");
printf("| 2) 开始边界 |\n");
printf("| 3) 退出游戏 |\n");
printf("------------------------------------------------------------------\n");
printf("---->请输入你的选择:");
scanf("%d", &a);
}
/*初始化状态*/
void setup()
{
gameOver = false;
/*根据当前时间设置"随机数种子"*/
srand(time(NULL));
Dir = STOP;
/*贪吃蛇的位置,固定在中间*/
x= width/2;
y= height/2;
/*食物的位置,位置是随机的*/
fruitX = rand()%width;
fruitY = rand()%height;
score = 0;
}
/*绘制界面*/
void draw()
{
if(stop == true)
{
return;
}
system("cls");/*清除屏幕*/
printf("分数:%d",score);
printf("\n");
/*第一行*/
int i;
for(i= 0 ;i {
printf("-");
}
printf("\n");
/*画中间的画面*/
int p;
for(p= 0 ;p {
int q;
for(q= 0 ;q {
/*第一行最后已给字符*/
if(q==0 || q==width-1)
{
printf("|");
}
if(p == fruitY && q == fruitX)/*食物的随机坐标*/
{
printf("O");
}
else
{
int k=0;
bool print = false;
/*贪吃蛇的长度 默认长度是 3*/
for(k=0;k {
if(tailX[k]==q && tailY[k]==p)
{
printf("*");
print = true;
}
}
/*如果这个位置打印了 * 就不要打印空格了*/
if(!print)
{
printf(" ");
}
}
}
printf("\n");
}
/*最后一行*/
int j;
for(j= 0 ;j {
printf("-");
}
}
/*按键输入控制*/
void input()
{
if(_kbhit())
{
/*获取键盘的输入字符*/
switch(_getch())
{
case '4':
case 75:/*左键*/
Dir = LEFT;
hit= true;
break;
case '8':
case 72:/*上键*/
Dir = UP;
hit= true;
break;
case '6':
case 77:/*右键*/
Dir = RIGHT;
hit= true;
break;
case '2':
case 80:/*向下键盘键 */
Dir = DOWN;
hit= true;
break;
case 'x':
case 27:/*ESE*/
gameOver = true;
break;
case 32:/*空格 暂停键*/
stop = !stop;
break;
}
}
else if(!hit && stop == false)/*如果没有改变方向*/
{
x++;
}
}
/*判断贪吃蛇的长度*/
void logic()
{
if(stop == true)
{
return;
}
/*把上一个位置记下*/
int lastX = tailX[0];
int lastY = tailY[0];
int last2X, last2Y;
/*重新获取当前的位置*/
tailX[0]=x;
tailY[0]=y;
int i=0;
/*遍历整条蛇的长度 把 0 的位置空出来,其余蛇的位置往后面的空间移动*/
for(i=1; i {
last2X = tailX[i];
last2Y = tailY[i];
tailX[i]=lastX;
tailY[i]=lastY;
lastX = last2X;
lastY = last2Y;
}
/*根据方向来改变x y 的值*/
switch(Dir)
{
case UP:
y--;
break;
case DOWN:
y++;
break;
case LEFT:
x--;
break;
case RIGHT:
x++;
break;
}
if(x<0 || width {
gameOver = true;
/*清除屏幕*/
system("cls");
printf("------------------------------------------------------------------\n");
printf("| |\n");
printf("| |\n");
printf("| 游戏结束 |\n");
printf("| |\n");
printf("| |\n");
printf("------------------------------------------------------------------\n");
}
if(x==fruitX && y==fruitY)
{
/*吃了一个食物,蛇的长度增加1*/
ntail++;
score+=10;
/*更新下一个食物的位置*/
fruitX = rand()%width;
fruitY = rand()%height;
}
}
int main()
{
#if 0
while(1)
{
printf("%d\n",_getch());
}
#endif
menu();
setup();
draw();
/*循环画贪吃蛇的界面*/
while(!gameOver)
{
draw();
input();
logic();
Sleep(70);
}
return 0;
}
上面这段代码直接在Dev C++上面应该是可以运行的,很多人在知乎上私信问我,为什么我的贪吃蛇执行不了呢,可能就是平台不同,少了这个头文件,少了那个头文件,但是你为什么不能跟我一样,用Dev C++呢,轻量级,简单。代码的精髓是什么?我认为精髓一定是思想,不是你写了多少行代码,用了什么高端的IDE。

到此,相信大家对"C语言实现贪吃蛇游戏代码分享"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
位置
代码
长度
食物
语言
坐标
状态
输入
一行
也就是
函数
分数
精髓
键盘
面的
内容
字符
宽度
屏幕
思想
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网与科技
北京路客互联网科技有限公司
工业互联网科技新基建
西安互联网科技
银优互联网科技有限公司
互联网 视角下的科技创新
互联网科技的未来发展
现代科技和互联网有关系吗
广州优美互联网科技
中国的互联网科技企业的崛起
武汉健翔互联网络科技有限公司
阿大互联网科技有限公司
燊美集互联网科技有限公司
中和天地互联网科技有限公司
合肥互联网科技公司公章图片
锡山区互联网智能科技产品供应
富国互联网金融科技混合基金
信承诺互联网科技有限公司
湖北辰鑫科技互联网
10位科技互联网大佬
互联网科技工作委员会
互联网是不是新科技
合肥互联网科技公司
紫鲸互联网科技
善班互联网科技有限公司
多迪互联网科技有限公司
海南科技产业互联网平台
温州喔噻互联网科技有限公司
华服互联网科技官网
爱医互联网络科技