c语言贪吃蛇游戏代码讲解,c语言贪吃蛇游戏代码加解释,C语言实现贪吃蛇游戏代码

c语言贪吃蛇游戏代码讲解,c语言贪吃蛇游戏代码加解释,C语言实现贪吃蛇游戏代码

本文主要详细介绍了C语言实现贪吃蛇游戏的代码。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。

本文分享C语言实现贪吃蛇游戏的具体代码,供大家参考。具体内容如下

//-普罗布朗区

//想想typedef定义的变量如何被fwrite存储。

//通常可以使用sleep()语句类来控制移动速度。

// Bool Playsound W (LPCWSTR,HMODULE,DWORD)":参数1无法从" const char[8]"转换为" LPCWSTR -原因-即在vc2010开发环境中可能找不到该字符串的音乐。

//思考如何消除不是这四个键的情况。

# includestdio.h

#includestdlib.h

#includeWindows.h

#includeconio.h

#includestring.h

#includetime.h

# includes mmsystem . h//导入声音头文件——也就是联合形成。

#pragma warning(disable:4996)//您可以使用此代码清除警告类。

# pragma注释(lib,' winmm . lib ')//链接库

//-可变区域

//-

#定义H 24//定义高度为24

#define W 78//定义的宽度是78

#定义假0

#定义正确1

//-

int n=0;//全局变量用于写入接口的状态

int z palyer=0;//记录玩家总数

int fs//用来记录玩家的分数

int key=72//用来控制播放器移动方向的变量,初始值给定为upper。

int change flag=0;//判断果实是否被吃掉,用来判断蛇尾是否需要擦除。

int I;//用于控制函数中循环的变量

char name[20];

char name 1[20];

struct player info///一个定义玩家名字和分数的结构。

{

char name[20];

int palyefs

} player[100];

Struct //定义蛇的食物生成的坐标类。

{

int x;

int y;

}食物;

Struct //用链表实现贪吃蛇的长度

{

int x[100];

int y[100];

int len

int zfs

int速度;

} snake1

//-

void XJ();

void dq();

void save();

void CK();

void Xuan();

void JM();

void PHB();

void fs1();

int begin();

void creat food();

void keyDown();

bool sfjs();

void getoxy(int x,int y);

void ex();

int YY();

//-功能区

//-界面功能区。

Void menu1()//选择进入游戏后是读取用户还是创建新用户。

{

int n;

系统('颜色3e ');//添加一个控制颜色的语句,也就是控制类似cmd的颜色——它控制控制台的颜色。

printf('===================================================\ n ');

printf(' # # \ n ');

printf(' # # \ n ');

Printf('# 1。创建新玩家# \ n ');

printf(# 2。阅读档案# \ n ');

printf(' # # \ n ');

printf(' # # \ n ');

printf('===================================================\ n ');

printf(' option:');

scanf('%d ',n);

如果(n==1)

{

XJ();

}

其他

如果(n==2)

{

dq();

}

其他

{

Printf('输入错误,请重新选择:\ n ');

menu 1();

}

}

Void menu2()//游戏中的主菜单

{

int n;

printf('===================================================\ n ');

printf(' # # \ n ');

Printf('#蛇版goddemon # \ n ');

printf(' # # \ n ');

Printf('# 1。开始游戏# \ n ');

printf(# 2。查看排行榜# \ n ');

printf(# 3。查看我的分数# \ n ');

printf(# 4。退出游戏# \ n’);

printf(' # # \ n ');

printf(' # # \ n ');

printf('===================================================\ n ');

printf(' option:\ n ');

while (1)

{

scanf_s('%d ',n);

开关(n)//选择功能

{

案例一:begin();打破;

案例二:PHB();打破;

案例三:fs1();打破;

案例四:ex();打破;

默认值:printf('输出错误,请重新输入:\ n’);打破;

}

}

}

void xj()//新建用户的名字

{

CK();

zplayer//注意如果是在退出的时候赋予的值,会出现只能读出两个值的状况特点-即在子函数中赋予值,必须在读取值后进行赋予值加减才可,否则可能出现乱码状况

printf('\t\t输入用户名:\ n’);//注意利用\t\t进行控制界面-很美好的

scanf('%s ',名称);

strcpy(玩家【播放器】.姓名、名称);//注意赋值的先后

菜单2();

}

void dq()//读取存档里面的用户且进行选择

{

CK();

printf('请输入读取的姓名:\ n’);

scanf('%s ',名称1);

for(I=0;i=zpalyer我)

{

if ((strcmp(player[i]).name,name1)==0))

{

菜单2();

}

其他

if(I==zplayer)

{

printf('未找到该用户,请在次选择读取与创建功能\ n’);

菜单1();

}

}

}

//- 功能函数区-

int begin()//开始游戏

{

系统(“cls”);

JM();

while (1)

{

keyDown();

如果(!sfjs())

打破;

创建食物();

睡眠(蛇1。速度);

}

玩家【玩家】玩EFS=蛇1。ZFS;

getoxy(W/2,H/2);

printf('本次得分:%d\n ',蛇1。ZFS);

睡眠(3000);

系统(“cls”);

菜单2();

睡眠(5000);

返回0;

}

void phb()//排行榜

{

int I;

printf('======================排行榜=======================\ n’);

for(I=0;我是zpalyer我)

{

printf('%s\t%d\n ',player[i]).姓名,玩家[我].palyefs);

}

printf('==================================================\ n ');

}

void fs1()//查看自己的分数

{

printf('你的分数为:\ n’);

printf('%d ',player[zplayer]).palyefs);

}

void ex()//退出功能

{

save();

退出(0);

}

无效保存()

{

文件* fp

fp=fopen('tcs.txt ',' w ');

fwrite(zpalyer,4,1,FP);

for(I=0;i=zpalyer我)

{

fwrite(player[i],sizeof(struct palier info),1,FP);

}

fclose(FP);

}

void ck()//读取文档中的数据状况

{

文件* fp

int I;

fp=fopen('tcs.txt ',' r ');

弗雷阿德(zpalyer,4,1,FP);

for(I=0;i=zpalyer我)

{

fread(player[i],sizeof(struct palier info),1,FP);

}

fclose(FP);

}

虚空玄宗()

{

int j=0,x=1;

菜单2();

}

void getoxy(int x,int y)//定位坐标位置的函数

{

坐标坐标

坐标X=x

坐标Y=y

SetConsoleCursorPosition(GetStdHandle(STD _ OUTPUT _ HANDLE),coord);

}

void jm()//贪吃蛇初始化界面

{

SetConsoleTextAttribute(GetStdHandle(STD _ OUTPUT _ HANDLE),FOREGROUND _ INTENSITY);

系统('颜色3e’);

//打印上下边界的循环

for(I=0;I=W;i=2)

{

getoxy(i,0);

printf(" ");

getoxy(i,H);//打印下边界

printf(" ");

}

for(I=0;I H;我)

{

getoxy(0,I);

printf(" ");

getoxy(W,I);

printf(" ");//打印下边界

}

while (1)//生成初始化的食物

{

srand((无符号int)time(NULL));

食物。x=rand()%(W-4)2;

食物。y=rand()%(H-2)1;

if (food.x % 2==0)

{

打破;

}

}

getoxy(food.x,food。y);

printf(' * ');

蛇1。len=3;

蛇1。速度=200;

蛇1。x[0]=W/2 ^ 1;//即在中间区域打印蛇头

蛇1。y[0]=H/2;

getoxy(snake1.x[0],snake1。y[0]);

printf(" ");

for(I=1;我蛇1 .leni )//打印蛇头的状况特点-利用格氧基(光标移动)printf语句联合打印出蛇

{

蛇1。x[I]=蛇1。x[I-1]2;//即将坐标赋值加2的状况理解

蛇1。y[I]=蛇1。y[I-1];

getoxy(snake1.x[i],snake1。y[I]);

printf(" ");

}

getoxy(W - 2,0);

返回;

}

void creatfood()//创建食物的函数

{

如果(蛇1。x[0]==食物。xsnake 1。y[0]==食物。y)//即蛇会吃掉这个食物

{

while (1)

{

int flag=1;

srand((无符号int)time(NULL));

食物。x=rand()%(W-4)2;

食物。y=rand()%(H-2)1;

for(I=0;我蛇1 .len我)

{

如果(蛇1。x[I]==食物。xs nake 1。y[I]==食物。y)

{

flag=0;

打破;

}

}

if (flagfood.x % 2==0)//用该语句进行判断是否该结束坐标赋值

{

打破;

}

}

getoxy(food.x,food . y);//就是创造食物,每次都创造。

printf(' * ');

snake 1 . len;//也就是蛇的长度加1,因为是吃食物造成的

snake 1 . speed-=5;

snake 1 . ZFS=10;//也就是一个水果的分数等于10分

change flag=1;//说明你吃过食物,不需要抹去蛇尾的意思。

}

返回;//即return可以为空

}void keyDown()//控制移动的函数

{

int pre _ key=key//记录上一个键的方向

if (_kbhit())

{

fflush(stdin);

//当//getch()读取方向键时,会返回两次。第一个调用返回0或224,第二个调用返回实际值。

key=_ getch();//第一个调用返回的不是实际值

key=_ getch();//第二次调用返回实际值

}

if (changeFlag==0)

{

getoxy(snake1.x[snake1.len - 1],snake 1 . y[snake 1 . len-1]);

printf(“”);//在蛇尾输出一个空格,擦除蛇尾。

}

//将蛇的每一段依次向前移动一段(蛇头除外)

for(I=snake 1 . len-1;I 0;我-)

{

snake 1 . x[I]=snake 1 . x[I-1];

snake 1 . y[I]=snake 1 . y[I-1];

}

if (pre_key==72 key==80)

key=72

if (pre_key==80 key==72)

key=80

if (pre_key==75 key==77)

key=75

if (pre_key==77 key==75)

key=77

开关(钥匙)

{

案例75:

snake 1 . x[0]-=2;//向左

打破;

案例77:

snake 1 . x[0]=2;//到右边

打破;

案例72:

snake 1 . y[0]-;//向上

打破;

案例80:

snake 1 . y[0];//向下

打破;

}

//打印出蛇头

getoxy(snake1.x[0],snake 1 . y[0]);

printf(“”);

getoxy(W - 2,0);

//因为目前没有食物,所以changFlag值为0

change flag=0;

返回;

}

boost fjs()//判断游戏是否结束的函数

{

if(snake 1 . y[0]==0 | | snake 1 . y[0]==H)

{

返回false

}

if(snake 1 . x[0]==0 | | snake 1 . x[0]==W)

{

返回false

}

for(I=1;我蛇1 . len;我)

{

if(snake 1 . x[I]==snake 1 . x[0]snake 1 . y[I]==snake 1 . y[0])//注意判断是否结束的功能。

{

返回false

}

}

返回true//即返回该函数本身为真

}

int yy()

{

PlaySound(TEXT('F:\\ apple.wav '),null,snd _ nodefault | snd _ async | snd _ loop);//即使用转换参数进行生成。

//SND _ loop-//要重复播放声音,必须和SND_ASYNC标志一起使用。

//snd _ async-//异步播放声音,PlaySound函数开始播放后会立即返回。

///SND_NODEFAULT -不播放默认声音。如果没有这个标志,PlaySound将在找不到声音时播放默认声音——典型的文件查找音乐是通过格式查看找到的。

返回0;

}

//-主要功能区

int main()

{

YY();

menu 1();

系统(“暂停”);

返回0;

}

效果图:

更多有趣的经典小游戏实现话题,分享给大家:

经典游戏总结

经典python游戏总结

Python俄罗斯方块游戏合集

经典的JavaScript游戏不停地玩。

经典java游戏总结

经典javascript游戏总结

这就是本文的全部内容。希望对大家的学习有帮助,支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: