
更新不易,麻烦多多点赞,欢迎你的提问,感谢你的转发,
最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!!
喵喵喵,你对我真的很重要。
额,我有点晕了,今天先上框架版,晚上在进行优化,这个代码有点多,还跳来跳去,有F1和F2为实现,重新玩一次效果不佳,咬到自己那里的调用也有问题。
这是贪吃蛇的第一版,后期将会升级,希望可以弄懂每一步,而不是抄代码。
目录
首先的首先,这次我编译器是下面这个(需要安装包,请私信Q一下小喵),养成一个好习惯。
原码,仅供侦错
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>//要使用windows的api ,lrq
//因为要用到随机数函数,所以要调用time.h文件
#include<time.h>
#include<conio.h>//用来接收键盘的输入输出
//////////////////////////////////////////////////////
//预定义
#define U 1
#define D 2
#define L 3
#define R 4
//U上 D下 L左 R右
/////////////////////////////////////////////////////
//定义全局变量
typedef struct snake
{
int x;
int y;
struct snake* next;
}snake;
snake *head;//指向蛇头的指针
snake *food;//创建的食物
snake *q;//用来遍历蛇的结点的
int status;
int add=10; //每个食物的得分
int sumScore=0;//总得分
int highScore=0;//最高分
//三种结束状态变量
//1,撞墙 2,自己咬到自己了 3,主动退出
int endGameStatus=0;
////////////////////////////////////////////////////
//函数声明
void createMap();
//坐标转换
void gotoXY(int a,int b);
//颜色更换
int color(int x);
//创建蛇
void initSnake();
//创建食物
void createFood();
//侦听键盘事件
void keyboardControl();
//让蛇动起来
int snakeMove();
//撞墙停止
int cantCrossWall();
//自己咬到自己
int biteSelf();
//主页面上小提示
void screenTips();
//结束页面
void endGame();
//匹诺曹绘制
void LostDraw();
void File_In();
void File_Out();
void choose();
void printsnake();
void welcometoGame();
/*
字符拼成英文图案
*/
void printsnake()
{
color(2);
printf(" \n");
printf(" __________ ___ \n");
printf(" / \\ / \\ \\ |____ __\\__ \n");
printf(" / ________ \\ / ___ \\ _/ __ | | / \n");
printf(" | | |__| _/_ |_| / [|] |/ \n");
printf(" | | | | | / _|_ \\__/ \n");
printf(" \\ \\_______ / \\ |___/ ____ \n");
printf(" \\ \\ ____ ____ ____ __ | | ___ ______ \n");
printf(" \\_______ \\ | |/ \\ / \\_/ / | | / / / \\ \n");
printf(" \\ \\ | ___ \\ / ____ / | |/ / / ____ \\ \n");
printf(" __ | | | / \\ \\ | | | / | / | /____\\ | \n");
printf(" \\ \\_______| | | | | | | |__| | | \\ | ________/ \n");
printf(" \\ / | | | | \\ \\ | |\\ \\ \\ \\____ \n");
printf(" \\__________/ |__| |__| \\___/\\__\\ |__| \\__\\ \\______/ \n");
}
void welcometoGame()
{
int n=0;
int i=0;
int j=0;
gotoXY(43,18);
color(11);
printf("贪 吃 蛇 游 戏");
color(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("|");
}
}
}
gotoXY(36,22);
color(10);
printf("1.开始游戏");
gotoXY(50,22);
color(10);
printf("2.游戏说明");
gotoXY(36,24);
color(10);
printf("3.退出游戏");
gotoXY(28,27);
color(3);
printf("请选择[1 2 3]:[ ]\b\b");//\b是退格使光标处于两个中括号之间
color(14);
scanf("%d",&n);
switch(n)
{
case 1:
system("cls");
File_Out();
sumScore=0;
createMap();
screenTips();
initSnake();
createFood();
keyboardControl();
break;
case 2:
//游戏说明界面
break;
case 3:
exit(0);
break;
default:
break;
}
}
void endGame()
{
//清屏操作
system("cls");
LostDraw();
if(endGameStatus==1)
{
//TODO
gotoXY(35,9);
color(7);
printf("对不起,你撞墙了!游戏结束");
}else if(endGameStatus==2)
{
//TODO
gotoXY(35,9);
color(7);
printf("对不起,你咬到自己了!游戏结束");
}
else if(endGameStatus==3)
{
//TODO
gotoXY(35,9);
color(7);
printf("游戏结束!");
}
gotoXY(43,12);
printf("你的得分是:%d分",sumScore);
//判断得分是否需要存储
if(sumScore>=highScore)
{
color(10);
gotoXY(33,16);
printf("创纪录了,最高分被你刷新了!");
//最高分存入文件当中
File_In();
} else{
gotoXY(33,16);
printf("继续努力吧~你离最高分还差:%d",highScore-sumScore);
}
//调用选择选项
choose();
}
void choose()
{
int n=0;
gotoXY(30,23);
color(12);
printf("重玩一局[1]");
gotoXY(50,23);
printf("溜了溜了[2]");
gotoXY(43,25);
printf("选择:");
scanf("%d",&n);
switch(n)
{
case 1:
system("cls");
printsnake();
//开始界面
welcometoGame();
break;
case 2:
exit(0);
break;
default:
gotoXY(35,27);
color(12);
printf("你输入的有误,请重新输入");
break;
}
}
//文件读写
void File_In()
{
//定义文件指针
FILE *fp;
//指针关联文件
fp=fopen("save.txt","w+");
//通过文件指针向文件写入内容
fprintf(fp,"%d",sumScore);
//关闭文件
fclose(fp);
}
void File_Out()
{
FILE *pp;
pp=fopen("save.txt","a+");
fscanf(pp,"%d",&highScore);
fclose(pp);
}
void LostDraw() {
/*
失败界面
*/
system("cls");
int i;
gotoXY(45, 1);
color(6);
printf(" |-----| "); //匹诺曹的帽子
gotoXY(45, 2);
color(6);
printf(" | | ");
gotoXY(43, 3);
color(6);
printf("-------------");
gotoXY(44, 4);
color(14);
printf("(");
gotoXY(47, 4);
color(15);
printf(" > <"); //眼睛
gotoXY(54, 4);
color(14);
printf(")");
gotoXY(17, 5);
color(11);
printf("+------------------------"); //上边框
gotoXY(35, 5);
color(14);
printf("oOOo");
gotoXY(39, 5);
color(11);
printf("----------"); //上边框
gotoXY(48, 5);
color(14);
printf("| |"); //鼻子
gotoXY(48, 6);
color(14);
printf("|_|");
gotoXY(51, 5);
color(11);
printf("----------"); //上边框
gotoXY(61, 5);
color(14);
printf("oOOo");
gotoXY(65, 5);
color(11);
printf("-----------------+"); //上边框
for (i = 6; i <= 19; i++) { //竖边框
gotoXY(17, i);
printf("|");
gotoXY(82, i);
printf("|");
}
gotoXY(17, 20);
printf("+------------------------------------------"); //下边框
gotoXY(60, 20);
color(11);
printf("----------------------+"); //下边框
}
void screenTips(){
color(11);
gotoXY(64,4);
printf("☆最高记录是:%d☆",highScore);
color(14);
gotoXY(64,6);
printf("当前得分:%d",sumScore);
gotoXY(73,11);
printf("小提示");
gotoXY(60,13);
color(6);
printf("§--------------------§");
gotoXY(60,26);
color(6);
printf("§--------------------§");
gotoXY(64,14);
color(3);
printf("每个食物得分:%d分",add);
gotoXY(64,16);
printf("不能撞墙,不能咬到自己");
gotoXY(64,18);
printf("用上,下,左,右箭头分别控制方向");
gotoXY(64,20);
printf("F1键加速,F2键减速");
gotoXY(64,22);
printf("空格键暂停游戏");
gotoXY(64,24);
printf("Esc键退出游戏");
}
int biteSelf()
{
snake *self;//这里不涉及内存分配,它只是涉及只向的内容的变化
self=head->next;
while(

本文详细介绍了使用C语言实现贪吃蛇游戏的过程,包括窗口设置、地图绘制、蛇结点和食物创建、键盘事件监听、游戏规则如撞墙和自我碰撞的检查,以及游戏界面的提示和结束页面的设计。代码中包含了头文件、全局变量、函数声明和主函数等关键部分,还探讨了游戏的背景、操作指南和游戏特色。作者提供了完整的源码,供读者参考和调试。
最低0.47元/天 解锁文章
开头有原码&spm=1001.2101.3001.5002&articleId=128433220&d=1&t=3&u=c936a0bb50714bad9e58baea35221944)
5180

被折叠的 条评论
为什么被折叠?



