↘话不多说,先上图为敬(●´∀`●)ノ


与君の勉:贪吃蛇Demo作为一个C语言的经典开发项目,比较适合初学者练习。透过程序看本质,该项目有种许多可供我们学习、提高的知识点:数组、指针、循环链表、多文件操作、三大结构运用……等等。“理论+实践”,相信入门的你通过该Demo会对C有更尽一层的理解。
由于最近其他事情耽搁,完整的设计流程笔记小编还未完成,不过我会尽快补更,就先把源码分享给大家,期待共同学习交流。
✅单独提出一些有趣且值得参考部分,完整源码及编译运行使用详见文末附件。
1.绘制字符画–蛇
//绘制字符画--蛇
int printSnake(void){
//清屏
system("cls");
gotoXY(35, 1);
setColor(6);
printf("/^\\/^\\"); //蛇眼
gotoXY(34, 2);
printf("|__| 0"); //蛇眼
gotoXY(33, 2);
setColor(2);
printf("_");
gotoXY(25, 3);
setColor(12);
printf("\\/"); //蛇信
gotoXY(31, 3);
setColor(2);
printf("/");
gotoXY(37, 3);
setColor(6);
printf("\\_/"); //蛇眼
gotoXY(41, 3);
setColor(10);
printf("\\");
gotoXY(26, 4);
setColor(12);
printf("\\____"); //舌头
gotoXY(32, 4);
printf("_________/");
gotoXY(31, 4);
setColor(2);
printf("|");
gotoXY(42, 4);
setColor(10);
printf("\\");
gotoXY(31, 5);
setColor(2);
printf("\\_______"); //蛇嘴
gotoXY(43, 5);
setColor(10);
printf("\\");
gotoXY(38, 6);
printf(" | | \\");
//下面都是画蛇身
gotoXY(38, 7);
printf(" / / \\ \\");
gotoXY(37, 8);
printf(" / / \\ \\");
gotoXY(36, 9);
printf(" / / \\ \\");
gotoXY(35, 10);
printf(" / / \\ \\");
gotoXY(34, 11);
printf(" / / _----_ \\ \\");
gotoXY(33, 12);
printf(" / / _--~ --_ | |");
gotoXY(33, 13);
printf("( ( _----~ _--_ --_ _/ |");
gotoXY(34, 14);
printf("\\ ~-——-~ --~--- ~-- ~-_-~ /");
gotoXY(35, 15);
printf("\\ -—~ ~—- -—~");
gotoXY(36, 16);
printf("~—-----—~ ~—---—~ ");
return 0;
}
2.欢迎界面
int i, j;
int n;
//显示字符画
printSnake();
//输出标题
setColor(11);
//移动光标
gotoXY(49, 18);
printf("贪吃蛇游戏\n");
//设置文本颜色
setColor(14);
//打印游戏边框
for (i = 20; i <= 26; i++){
//控制行
for (j = 27; j <= 74; j++) //控制列
{
//定位光标
gotoXY(j, i);
if (i == 20 || i == 26){
printf("-");
}
else if (j == 27 || j == 74){
printf("|");
}
else{
printf(" ");
}
}
}
//输出菜单
//设置文本颜色
setColor(12);
gotoXY(35, 22);
printf("1. 开始游戏");
gotoXY(55, 22);
printf("2. 游戏说明");
gotoXY(35, 24);
printf("3. 退出游戏");
gotoXY(35, 24);
printf("3. 退出游戏");
//输出用户选择提示
gotoXY(27, 27);
printf("请选择[1 2 3]:");
//等待用户输入一个数字
scanf("%d", &n);
//读取回车字符
getchar();
return n;
}
3.初始化蛇
//初始化蛇
int initSnake(void)
{
int i = 0;
snake_t *new = NULL;
snake_t *tmp = NULL;
//循环创建4各结点
for (i = 0; i < 4; i++){
//分配空间
new = malloc(sizeof(snake_t));
if (NULL == new)
{
printf("malloc failed…\n");
break;
}
memset(new, 0, sizeof(snake_t));
//初始化列 是个偶数
new->x = 24 + i * 2;
//初始化行
new->y = 5;
//头插法
new->next = head;
head = new;
}
//绘制蛇
tmp = head;
while (NULL != tmp)
{
//设置蛇的颜色为黄色
setColor(14);
gotoXY(tmp->x, tmp->y);
//如果是第一个节点 输出圆形符号
if (head == tmp)
{
printf("●");
}
else
{
printf("★");
}
//指向下一个节点
tmp = tmp->next;
}
return 0;
}
4.随机食物
//随机食物
//随机食物
int randFood(void)
{
snake_t *new = NULL;
snake_t *tmp = NULL;
//分配空间
new = malloc(sizeof(snake_t));
if (NULL == new)
{
printf("malloc failed…\n");
return -1;
}
//循环随机食物 保证食物没有在蛇身
while (1)
{
//清零
memset(new, 0, sizeof(snake_t));
//随机x值
while (1)
{
//随机x值 是一个偶数(2,54)
//rand() %53 -->(0, 52) -->+2 -->(2,54)
new->x = rand() % 53 + 2;
if (new->x % 2 == 0)
{
break;
}
}
//rand()产生一个随机数
//(1,25)
//rand( ) % 25 --> (0,24) -->+1 -->(1,25)
new->y = rand() % 25 + 1;
//判断食物不能在蛇身上
tmp = head;
while (NULL != tmp)
{
if ((tmp->x == new->x) && (tmp->y == new->y))
{
break;
}
tmp = tmp->next;

本文分享了一个C语言实现的贪吃蛇游戏项目,详细介绍了绘制字符画、欢迎界面、蛇的初始化、随机食物生成、蛇的移动等关键功能。项目采用循环链表管理蛇身,实现了动态增减节点,并通过键盘控制蛇的方向。文章提供了完整源码,包括snake.c、main.c和snake.h三个文件,便于读者理解和实践。
最低0.47元/天 解锁文章
1170





