c语言贪吃蛇代码及解析,c语言贪吃蛇代码改变蛇身

c语言贪吃蛇代码及解析,c语言贪吃蛇代码改变蛇身,C语言实现贪吃蛇代码

这篇文章主要为大家详细介绍了C语言实现贪吃蛇代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

#包含" stdafx.h "

# includestdio.h

#includetime.h

#includewindows.h

#includestdlib.h

#includeconio.h

#定义U 1

#定义D 2

#定义L 3

#定义R 4 //蛇的状态u:上d:下l:左r:右

typedef结构snake //蛇身的一个节点

{

int x;//节点的x坐标

int y;//节点的y坐标

struct snake * next//蛇身的下一个节点

}蛇;

(同Internationalorganizations)国际组织得分=0,add=10//总得分和每吃一次食物的得分

int高分=0;//最高分

(同Internationalorganizations)国际组织状态,sleeptime=200//蛇前进状态,每次运行的时间间隔

蛇*头,*食;//蛇头指针,食物指针

蛇* q;//遍历蛇时用的指针

int endgamestatus=0;//游戏结束时的状态

处理hOut//控制台句柄

void gotoxy(int x,int y);

int color(int c);

void打印蛇();

void wl come();

void create map();

void score and tips();

void初始化snake();

void创建food();

int bite self();

void cantcroswall();

空的加速();

void speeddown();

void蛇动();

void键盘控件();

void lost draw();

void端游();

void choose();

void file _ out();

void file _ in();

void explation();

主()

{

系统('模式控制列=100行=30 ');

print snake();

wlcome();

file _ out();

键盘控制();

endgame();

}

void gotoxy(int x,int y)//设置光标位置

{ COORD c;

c.X=x

c.Y=y

SetConsoleCursorPosition(GetStdHandle(STD _ OUTPUT _ HANDLE),c);//定位光标的位置

}

int color(int c)//设置颜色

{

SetConsoleTextAttribute(GetStdHandle(STD _ OUTPUT _ HANDLE),c);

返回0;

}

void printsnake()//打印字符蛇

{

gotoxy(2,5);

颜色(3);

printf('姓名:张小艾');

gotoxy(2,6);

颜色(3);

printf('学号:1910101099');

gotoxy(35,1);

颜色(6);

printf('/^\\/^\');

gotoxy(34,2);

printf(' | _ | o | ');

gotoxy(33,2);

颜色(2);

printf(' _ ');

gotoxy(25,3);

颜色(12);

printf(' \ \/');

gotoxy(31,3);

颜色(2);

printf('/');

gotoxy(37,3);

颜色(6);

printf(' \ \ _/');

gotoxy(41,3);

颜色(10);

printf(' \ ');

戈托西(26,4);

颜色(12);

printf(' \ \ _ _ _ _ _ _ ');

gotoxy(32,4);

printf(' _ _ _ _ _ _ _ _ _ _ _ _ ');

gotoxy(31,4);

颜色(2);

printf(' | ');

gotoxy(43,4);

颜色(10);

printf(' \ ');

gotoxy(32,5);

颜色(2);

printf(' \ \ _ _ _ _ _ _ _ ');

gotoxy(44,5);

颜色(10);

printf(' \ ');

gotoxy(39,6);

printf(' | | \ ');

gotoxy(38,7);

printf('//\ ');

gotoxy(37,8);

printf('//\ \ \ ');

gotoxy(35,9);

printf('//\ \ \ ');

gotoxy(34,10);

printf('//\ \ \ ');

gotoxy(33,11);

printf('//_-_ \ \ \ ');

gotoxy(32,12);

printf('//_-~ ~-_ | | ');

gotoxy(31,13);

printf('((_-~ _-_ ~-_ _/| ');

gotoxy(32,14);

printf(' \ \ ~-_ _ _ _ _ _ _-~ _-~ ~-_ ~-_-~/');

gotoxy(33,15);

printf(' ~-_ _-~ ~-_ _-~ ');

gotoxy(35,16);

printf(' ~-_ _ _ _ _ _ _-~ ~-_ _ _ _ _ _-~ ');

}

void wlcome()//欢迎界面

{ int n;

int i,j=1;

gotoxy(43,18);

颜色(11);

printf('贪吃蛇大作战');

颜色(14);

for(I=20;i=26我)

{

for(j=27;j=74j)

{

gotoxy(j,I);

如果(i==20||i==26)

{

printf('-');

}

else if(j==27||j==74)

{

printf(' | ');

}

}

}

颜色(12);

gotoxy(35,22);

printf('1 .开始游戏');

gotoxy(55,22);

printf('2 .游戏说明');

gotoxy(35,24);

printf('3 .退出游戏');

gotoxy(29,27);

颜色(3);

printf('请选择1 2 3 \ n’);

颜色(14);

scanf('%d ',n);

开关(名词)

{

案例1:

系统(“cls”);//清屏

创建地图();

init snake();

创造食物();

键盘控制();

打破;

案例二:

explation();

打破;

打破;

案例三:

退出(0);

打破;

}

}

void createmap()//创建地图

{

int i,j;

for(I=0;i58i=2)

{

gotoxy(i,0);

颜色(5);

printf('');

gotoxy(i,26);

printf('');

}

for(I=0;i26我)

{

gotoxy(0,I);

printf('');

gotoxy(56,I);

printf('');

}

for(I=2;i56i=2)

{

for(j=1;j26j)

{

gotoxy(i,j);

颜色(3);

printf(\ n \ n ');

}

}

}

void scoreandtips()//游戏界面右侧的得分和小提示

{

file _ out();

gotoxy(64,4);

颜色(11);

printf('*最高纪录*: %d ',高分);

gotoxy(64,8);

颜色(14);

printf('得分:%d ',分数);

颜色(13);

gotoxy(73,11);

printf('小提示');

gotoxy(60,13);

颜色(6);

printf('-');

gotoxy(60,25);

printf('-');

颜色(3);

gotoxy(64,14);

printf('每个食物得分:%d分,添加);

gotoxy(64,16);

printf('不能穿墙,不能咬到自己');

gotoxy(64,18);

printf('用分别控制蛇的移动');

gotoxy(64,20);

printf('F1为加速,F2为减速');

gotoxy(64,22);

printf('空格:暂停游戏');

gotoxy(64,24);

printf('ESC:退出游戏');

}

void file_out()//打开文件记录最高分

{

文件* fp

fp=fopen('save.txt ',' a ');

fscanf(fp,' %d ',高分);

fclose(FP);

}

void initsnake()

{

蛇*尾;

int I;

tail=(snake *)malloc(sizeof(snake)).

tail-x=24;

tail-y=5;

tail-next=NULL;

for(I=1;I=4;我)

{

head=(snake *)malloc(sizeof(snake)).

头-下=尾;

head-x=24 ^ 2 * I;

head-y=5;

尾巴=头;

}

而(尾巴!=空)

{gotoxy(tail-x,tail-y);

颜色(14);

printf(" ");//蛇身由组成

tail=tail-next;

}

}

void createfood()//随机出现食物

{

蛇*食_ 1;

srand((无符号)时间(空));

food _ 1=(snake *)malloc(sizeof(snake)).

while((food_1-x%2!=0))

{

food _ 1-x=rand()r ^ 2;

}

food _ 1-y=rand()$ 1;

q=头;

while(q-next==NULL)

{

if(q-x==food_1-xq-y==food_1-y)

{

免费(food _ 1);

创造食物();

}

q=q-next;

}

gotoxy(food_1-x,food _ 1-y);

food=food _ 1;

颜色(12);

printf(“@”);

}

int biteself()

{

蛇*自我;//定义自己为蛇身上除蛇头以外的节点

self=head-next;

而(自我!=空)

{

if(self-x==head-x self-y==head-y)

{

返回1;

}

self=self-next;

}

返回0;

}

空心斜边墙()

{

if(head-x==0 | | head-x==56 | | head-y==0 | | head-y==26)

{

endgamestatus=1;

endgame();

}

}

空的加速()//加速

{

如果(睡眠时间=50)

{

睡眠时间=睡眠时间-10;

add=add 2;

}

}

void speeddown()//减速

{

如果(睡眠时间350)

{

睡眠时间=睡眠时间30

add=add-2;

if(sleeptime==350)

{

add=1;

}

}

}

void snakemove()//控制方向

{

snake * nexthead

斜跨墙();

nexthead=(snake *)malloc(sizeof(snake));

if(status==U)//上

{

下一个head-x=head-x;//向上前进时,x不变,y-1

下一个head-y=head-y-1;

下一个head-next=head;

head=nexthead

q=头;

//如果下一个位置上有食物,下一个位置的坐标和食物坐标相同

if(next head-x==food-x next head-y==food-y)

{

而(q!=空)

{

gotoxy(q-x,q-y);

颜色(14);

printf(" ");

q=q-next;

}

分数=分数相加;

speedup();

创造食物();

}

其他

{

while(q-next-next!=NULL)//如果没有遇见食物

{

gotoxy(q-x,q-y);

颜色(14);

printf(" ");

q=q-next;

}

//经过上面的循环,问指向蛇尾,蛇尾的下一步就是蛇走过去的位置

gotoxy(q-next-x,q-next-y);

颜色(3);

printf('');//恢复走过的位置

免费(q-next);

q-next=NULL;

}

}

如果(状态==D)

{

下一个head-x=head-x;//向下前进时,x不变,y 1

下一个head-y=head-y 1;

下一个head-next=head;

head=nexthead

q=头;

//如果下一个位置上有食物,下一个位置的坐标和食物坐标相同

if(next head-x==food-x next head-y==food-y)

{

而(q!=空)

{

gotoxy(q-x,q-y);

颜色(14);

printf(" ");

q=q-next;

}

分数=分数相加;

speedup();

创造食物();

}

其他

{

while(q-next-next!=NULL)//如果没有遇见食物

{

gotoxy(q-x,q-y);

颜色(14);

printf(" ");

q=q-next;

}

//经过上面的循环,问指向蛇尾,蛇尾的下一步就是蛇走过去的位置

gotoxy(q-next-x,q-next-y);

颜色(3);

printf('');//恢复走过的位置

免费(q-next);

q-next=NULL;

}

}

if(status==L)//左

{

下一个head-x=head-x-2;//向左前进时,x不变,y 1

下一个head-y=head-y;

下一个head-next=head;

head=nexthead

q=头;

//如果下一个位置上有食物,下一个位置的坐标和食物坐标相同

if(next head-x==food-x next head-y==food-y)

{

而(q!=空)

{

gotoxy(q-x,q-y);//食物变成蛇身上的一部分

颜色(14);

printf(" ");

q=q-next;

}

分数=分数相加;

speedup();

创造食物();

}

其他

{

while(q-next-next!=NULL)//如果没有遇见食物

{

gotoxy(q-x,q-y);

颜色(14);

printf(" ");

q=q-next;

}

//经过上面的循环,问指向蛇尾,蛇尾的下一步就是蛇走过去的位置

gotoxy(q-next-x,q-next-y);

颜色(3);

printf('');//恢复走过的位置

免费(q-next);

q-next=NULL;

}

}

如果(状态==R)

{

下一个head-x=head-x ^ 2;//向上前进时,x不变,y-1

下一个head-y=head-y;

下一个head-next=head;

head=nexthead

q=头;

//如果下一个位置上有食物,下一个位置的坐标和食物坐标相同

if(next head-x==food-x next head-y==food-y)

{

而(q!=空)

{

gotoxy(q-x,q-y);

颜色(14);

printf(" ");

q=q-next;

}

分数=分数相加;

speedup();

创造食物();

}

其他

{

while(q-next-next!=NULL)//如果没有遇见食物

{

gotoxy(q-x,q-y);

颜色(14);

printf(" ");

q=q-next;

}

//经过上面的循环,问指向蛇尾,蛇尾的下一步就是蛇走过去的位置

gotoxy(q-next-x,q-next-y);

颜色(3);

printf('');//恢复走过的位置

免费(q-next);

q-next=NULL;

}

}

if(biteself()==1)

{

endgamestatus=2;

endgame();

}

}

void keyboardcontrol()

{

status=R;

while(1)

{

score and tips();

//GetAsyncKeyState函数用来判断函数调用指定虚拟键的状态

if(GetAsyncKeyState(VK _上)状态!=D)

{

status=U;

}

else if(GetAsyncKeyState(VK _下)状态!=U)

{

状态=D;

}

else if(GetAsyncKeyState(VK _左)状态!=R)

{

status=L;

}

else if(GetAsyncKeyState(VK _右)状态!=L)

{

status=R;

}

if(GetAsyncKeyState(VK空间))

{

while(1)

{

//调用睡眠函数,令进程停止,直到达到其中设定的参数时间

睡眠(300);

if(GetAsyncKeyState(VK空间))

{

打破;

}

}

}

else if(GetAsyncKeyState(VK _转义))

{

endgamestatus=3;

打破;

}

else if(GetAsyncKeyState(VK_F1))

{

speedup();

}

else if(GetAsyncKeyState(VK_F2))

{

如果(睡眠时间350)

{

睡眠时间=睡眠时间30

add=add-2;

if(sleeptime==350)

{

add=1;

}

}

}

睡眠(睡眠时间);

蛇动();

}

}

void lostdraw()

{

系统(“cls”);

int i,j;

gotoxy(17,5);

颜色(11);

printf('-');

gotoxy(35,5);

颜色(14);

printf(' o00o ');

gotoxy(39,5);

颜色(11);

printf('-');

gotoxy(48,5);

颜色(14);

printf('-');

gotoxy(51,5);

颜色(11);

printf('-');

gotoxy(61,5);

颜色(14);

printf(' o00o ');

gotoxy(65,5);

颜色(11);

printf('-');

for(I=6;i=19我)

{

gotoxy(17,I);

printf(' | ');

gotoxy(82,I);

printf(' | ');

}

gotoxy(17,20);

printf('-');

gotoxy(52,20);

颜色(11);

printf('-');

}

void endgame()

{

系统(“cls”);

if(endgamestatus==1)

{

输了平局();

gotoxy(35,9);

颜色(12);

printf('对不起,您撞到墙了。游戏结束!');

}

else if(endgamestatus==2)

{

输了平局();

gotoxy(35,9);

颜色(12);

printf('对不起,您咬到自己了。游戏结束!');

}

else if(endgamestatus==3)

{

输了平局();

gotoxy(40,9);

颜色(12);

printf('您结束了游戏。');

}

gotoxy(43,12);

颜色(13);

printf('您的得分是%d ',分数);

如果(得分=高分)

{

颜色(10);

gotoxy(33,16);

printf('创新纪录啦!你真棒!');

file _ in();

}

选择();

}

void file_in()//将最高分存储到文件中

{

文件* fp

fp=fopen('save.txt ',' w ');//以读写的方式建立文件

fprintf(fp,' %d ',score);

fclose(FP);

}

空的选择()

{

int n;

gotoxy(25,23);

颜色(12);

printf('重玩一局- 1');

gotoxy(52,23);

Printf('停止播放并退出-2 ');

gotoxy(46,25);

颜色(11);

printf(' Select:');

scanf('%d ',n);

开关(n)

{

案例1:

系统(“cls”);

得分=0;

sleeptime=200

add=10

print snake();

wlcome();

打破;

案例二:

退出(0);

打破;

默认值:

gotoxy(35,27);

颜色(12);

Printf('您输入错误,请重新输入');

系统(“pause nul”);//按任意键

endgame();

选择();

打破;

}

}

无效解释()

{

int i,j=1;

系统(“cls”);

颜色(13);

gotoxy(44,3);

Printf('游戏描述');

颜色(2);

for(I=6;i=22我)

{

for(j=20;j=75j)

{

gotoxy(j,I);

if(I==6 | | I==22)printf('=');

else if(j==20 | | j==75)printf(' | | ');

}

}

颜色(3);

gotoxy(30,8);

printf(‘1,不能穿墙咬自己’);

颜色(3);

gotoxy(30,8);

printf(‘1,不能穿墙咬自己’);

颜色(10);

gotoxy(30,11);

Printf('2,用分别控制蛇的移动');

颜色(14);

gotoxy(30,14);

Printf('3,F1表示加速,F2表示减速');

颜色(11);

gotoxy(30,17);

Printf('4,按空格键暂停游戏,再按空格键继续');

颜色(4);

gotoxy(30,20);

Printf('5,ESC:退出游戏,space:暂停游戏');

getch();//按任意键返回主界面

系统(“cls”);

print snake();

wlcome();

}

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

经典游戏总结

经典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算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: