问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于贪吃蛇小游戏的一些疑问???

发布网友 发布时间:2022-04-24 02:15

我来回答

2个回答

热心网友 时间:2023-10-21 10:19

这是我找别人的
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <time.h>
#define food 7
#define head 5
#define body 6
#define wall 1
#define road 0
#define up 1
#define down 2
#define left 3
#define right 4
#define kuan 25
#define chang 30
#define num 20
int map[kuan][chang],hi,bj,fi,fj,t;//全局变量 地图数组 头部坐标,食物坐标,速度控制参数
void gotoxy(int x,int y) //移动坐标
{
COORD coord;
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}
void hidden()//隐藏光标
{
CONSOLE_CURSOR_INFO cci;
GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cci);
cci.bVisible=0;//赋1为显示,赋0为隐藏
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cci);
}
void paint(int xx,int yy)
{
gotoxy(2*yy,xx);
switch(map[xx][yy])
{
case 0:printf(" ");break;
case 1:printf("□");break;
case 5:printf("◎");break;
case 6:printf("△");break;
case 7:printf("●");break;
}
}
void start()//初始化地图数组信息,随机蛇头位置,第一个食物位置
{
int i,j;
for(i=0;i<=kuan-1;i++)
{
map[i][0]=wall;
map[i][chang-1]=wall;
}
for(j=0;j<=chang-1;j++)
{
map[0][j]=wall;
map[kuan-1][j]=wall;
}
for (i=0;i<=kuan-1;i++)
for (j=0;j<=chang-1;j++)
paint(i,j);
gotoxy(64,2);printf("1.a减速//d加速");
gotoxy(64,4);printf("2. esc暂停");gotoxy(65,5);printf(" 任意键继续");

}
int getkey(int ddd)//接收按键根据当前方向按动任意键暂停不响应与运动方向相反的按键
{
char c;
while(c=getch())
{
switch(c)
{
case 72://1
{
if(ddd==2)
return down;
else
return up;
}
case 80://2
{
if(ddd==1)
return up;
else
return down;
}
case 75://3
{
if(ddd==4)
return right;
else
return left;
}
case 77://4
{
if(ddd==3)
return left;
else
return right;
}
case 27:continue;//esc暂停,a减速,d加速
case 97:{t+=10;return ddd;}
case 100:{t-=10;return ddd;}
default:{
return ddd;
}
}
return 0;
}
}

void game()
{
int fd=0,len=1,direction=4,a[100000],b[100000],k,m,kk=0,aa=0,bb=0,i,iii=0;
int sj=0;//sj用来记录吃到的果实的存放其坐标的数组的角标
int zz=0,mm=0,fa[num+2],fb[num+2];
t=250;//全局变量在这里赋值
hi=rand()%(kuan-7)+6;bj=rand()%(chang-8)+5;map[hi][bj]=head;paint(hi,bj);//在一定范围随机蛇头初始位置,身子为左侧3个格子(可以拓展写入game里面)

a[3]=hi;b[3]=bj;//头部位置存放到 a b数组中第四项中

for (i=0;i<3;i++)
{map[hi][bj-1-i]=body;paint(hi,bj-i-1);a[2-i]=hi;b[2-i]=(bj-i-1);}
//身子位置按照尾巴至颈部存放到 0 1 2 项中

k=4;m=4;//数组之后从第四位开始存放蛇头坐标

while(1)
{
while(!kbhit()&&len!=0)//当没有按键输入并且没有撞到墙使得len=0时候进入循环(防止撞到墙后没有按键输入仍终止不了)
{
while (fd<=num)//如果fd<=num 则进入循环随机刷新一个新果实
{
do
{fi=rand()%(kuan-3)+1;fj=rand()%(chang-3)+1;}
while(map[fi][fj]>0);//不在墙或者蛇的身体内
if(fd<20)
{map[fi][fj]=food;paint(fi,fj);fa[zz++]=fi;fb[mm++]=fj;fd++;}
else
{map[fi][fj]=food;paint(fi,fj);fa[sj]=fi;fb[sj]=fj;fd++;}//如果fd=20进来循环,就会把新生成的果实的坐标赋给被上次被吃的数组,便于之后的循环检测
}
switch(direction)
{
case 1: {map[hi][bj]=body;paint(hi,bj);hi--;break;}
case 2: {map[hi][bj]=body;paint(hi,bj);hi++;break;}
case 3: {map[hi][bj]=body;paint(hi,bj);bj--;break;}
case 4: {map[hi][bj]=body;paint(hi,bj);bj++;break;}
}
if ((map[hi][bj]==body)||(map[hi][bj]==wall))//在画出新的头部时刻先判断即将画出的位置是不是map上坐标为身子的位置。是则失败
{gotoxy(30,12);printf("失败了!");len=0;break;}

map[hi][bj]=head;paint(hi,bj);//接上,不是则执行这一步画出头部
a[k++]=hi;b[m++]=bj;kk++;//另设置两个数组记录头部经过的坐标,kk代表头部运行的次数
for(i=0;i<=num;i++)
{
if (hi==fa[i]&&bj==fb[i])//吃到了果实,fd+1,分数+1,长度+1,记录被吃的果实的坐标存放数组的角标
{fd=fd-1;len++;iii++;sj=i;}
}
if(kk>(len-1))//头部每走一步,kk++,删除之前的轨迹坐标所对应的身子,即尾巴。若吃到食物则尾巴保留一次,待头部再次运动则删除。
{
if(map[a[aa]][b[bb]]!=wall)
{
map[a[aa]][b[bb]]=road;
paint(a[aa],b[bb]);
aa++;bb++;
kk--;
}
else
{aa+=9;bb+=9;map[a[aa]][b[bb]]=road;paint(a[aa],b[bb]);kk-=9;}
}
if(len>=18)//*版本代码
{
for (i=1;i<11;i++)
{map[a[k-11-i]][b[m-11-i]]=wall;paint((a[k-11-i]),(b[m-11-i]));}//从脑袋后第十二节开始变成墙
len-=8;
t+=4;
}
gotoxy(64,7);printf("3.分数:%d",iii);
Sleep(t-2*iii);//速度算法有待改进!!!!!!!!
}
if (len==0)//撞墙退出,退出while(1)总循环
break;
direction=getkey(direction);//按键按一下,getch提取并删除输入的字符,所以仍能继续进入while(!kbhit())中循环;
}
}
main()
{
srand(time(NULL));
hidden();
start();
game();
gotoxy(0,0);//锁定屏幕显示
getchar();
}

热心网友 时间:2023-10-21 10:19

能,你不能运行的主要原因是你没有装EasyX

所以没有头文件"graphics.h"

而贪吃蛇大多依靠着个头文件来运行


热心网友 时间:2023-10-21 10:19

这是我找别人的
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <time.h>
#define food 7
#define head 5
#define body 6
#define wall 1
#define road 0
#define up 1
#define down 2
#define left 3
#define right 4
#define kuan 25
#define chang 30
#define num 20
int map[kuan][chang],hi,bj,fi,fj,t;//全局变量 地图数组 头部坐标,食物坐标,速度控制参数
void gotoxy(int x,int y) //移动坐标
{
COORD coord;
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}
void hidden()//隐藏光标
{
CONSOLE_CURSOR_INFO cci;
GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cci);
cci.bVisible=0;//赋1为显示,赋0为隐藏
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cci);
}
void paint(int xx,int yy)
{
gotoxy(2*yy,xx);
switch(map[xx][yy])
{
case 0:printf(" ");break;
case 1:printf("□");break;
case 5:printf("◎");break;
case 6:printf("△");break;
case 7:printf("●");break;
}
}
void start()//初始化地图数组信息,随机蛇头位置,第一个食物位置
{
int i,j;
for(i=0;i<=kuan-1;i++)
{
map[i][0]=wall;
map[i][chang-1]=wall;
}
for(j=0;j<=chang-1;j++)
{
map[0][j]=wall;
map[kuan-1][j]=wall;
}
for (i=0;i<=kuan-1;i++)
for (j=0;j<=chang-1;j++)
paint(i,j);
gotoxy(64,2);printf("1.a减速//d加速");
gotoxy(64,4);printf("2. esc暂停");gotoxy(65,5);printf(" 任意键继续");

}
int getkey(int ddd)//接收按键根据当前方向按动任意键暂停不响应与运动方向相反的按键
{
char c;
while(c=getch())
{
switch(c)
{
case 72://1
{
if(ddd==2)
return down;
else
return up;
}
case 80://2
{
if(ddd==1)
return up;
else
return down;
}
case 75://3
{
if(ddd==4)
return right;
else
return left;
}
case 77://4
{
if(ddd==3)
return left;
else
return right;
}
case 27:continue;//esc暂停,a减速,d加速
case 97:{t+=10;return ddd;}
case 100:{t-=10;return ddd;}
default:{
return ddd;
}
}
return 0;
}
}

void game()
{
int fd=0,len=1,direction=4,a[100000],b[100000],k,m,kk=0,aa=0,bb=0,i,iii=0;
int sj=0;//sj用来记录吃到的果实的存放其坐标的数组的角标
int zz=0,mm=0,fa[num+2],fb[num+2];
t=250;//全局变量在这里赋值
hi=rand()%(kuan-7)+6;bj=rand()%(chang-8)+5;map[hi][bj]=head;paint(hi,bj);//在一定范围随机蛇头初始位置,身子为左侧3个格子(可以拓展写入game里面)

a[3]=hi;b[3]=bj;//头部位置存放到 a b数组中第四项中

for (i=0;i<3;i++)
{map[hi][bj-1-i]=body;paint(hi,bj-i-1);a[2-i]=hi;b[2-i]=(bj-i-1);}
//身子位置按照尾巴至颈部存放到 0 1 2 项中

k=4;m=4;//数组之后从第四位开始存放蛇头坐标

while(1)
{
while(!kbhit()&&len!=0)//当没有按键输入并且没有撞到墙使得len=0时候进入循环(防止撞到墙后没有按键输入仍终止不了)
{
while (fd<=num)//如果fd<=num 则进入循环随机刷新一个新果实
{
do
{fi=rand()%(kuan-3)+1;fj=rand()%(chang-3)+1;}
while(map[fi][fj]>0);//不在墙或者蛇的身体内
if(fd<20)
{map[fi][fj]=food;paint(fi,fj);fa[zz++]=fi;fb[mm++]=fj;fd++;}
else
{map[fi][fj]=food;paint(fi,fj);fa[sj]=fi;fb[sj]=fj;fd++;}//如果fd=20进来循环,就会把新生成的果实的坐标赋给被上次被吃的数组,便于之后的循环检测
}
switch(direction)
{
case 1: {map[hi][bj]=body;paint(hi,bj);hi--;break;}
case 2: {map[hi][bj]=body;paint(hi,bj);hi++;break;}
case 3: {map[hi][bj]=body;paint(hi,bj);bj--;break;}
case 4: {map[hi][bj]=body;paint(hi,bj);bj++;break;}
}
if ((map[hi][bj]==body)||(map[hi][bj]==wall))//在画出新的头部时刻先判断即将画出的位置是不是map上坐标为身子的位置。是则失败
{gotoxy(30,12);printf("失败了!");len=0;break;}

map[hi][bj]=head;paint(hi,bj);//接上,不是则执行这一步画出头部
a[k++]=hi;b[m++]=bj;kk++;//另设置两个数组记录头部经过的坐标,kk代表头部运行的次数
for(i=0;i<=num;i++)
{
if (hi==fa[i]&&bj==fb[i])//吃到了果实,fd+1,分数+1,长度+1,记录被吃的果实的坐标存放数组的角标
{fd=fd-1;len++;iii++;sj=i;}
}
if(kk>(len-1))//头部每走一步,kk++,删除之前的轨迹坐标所对应的身子,即尾巴。若吃到食物则尾巴保留一次,待头部再次运动则删除。
{
if(map[a[aa]][b[bb]]!=wall)
{
map[a[aa]][b[bb]]=road;
paint(a[aa],b[bb]);
aa++;bb++;
kk--;
}
else
{aa+=9;bb+=9;map[a[aa]][b[bb]]=road;paint(a[aa],b[bb]);kk-=9;}
}
if(len>=18)//*版本代码
{
for (i=1;i<11;i++)
{map[a[k-11-i]][b[m-11-i]]=wall;paint((a[k-11-i]),(b[m-11-i]));}//从脑袋后第十二节开始变成墙
len-=8;
t+=4;
}
gotoxy(64,7);printf("3.分数:%d",iii);
Sleep(t-2*iii);//速度算法有待改进!!!!!!!!
}
if (len==0)//撞墙退出,退出while(1)总循环
break;
direction=getkey(direction);//按键按一下,getch提取并删除输入的字符,所以仍能继续进入while(!kbhit())中循环;
}
}
main()
{
srand(time(NULL));
hidden();
start();
game();
gotoxy(0,0);//锁定屏幕显示
getchar();
}

热心网友 时间:2023-10-21 10:19

这是我找别人的
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <time.h>
#define food 7
#define head 5
#define body 6
#define wall 1
#define road 0
#define up 1
#define down 2
#define left 3
#define right 4
#define kuan 25
#define chang 30
#define num 20
int map[kuan][chang],hi,bj,fi,fj,t;//全局变量 地图数组 头部坐标,食物坐标,速度控制参数
void gotoxy(int x,int y) //移动坐标
{
COORD coord;
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}
void hidden()//隐藏光标
{
CONSOLE_CURSOR_INFO cci;
GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cci);
cci.bVisible=0;//赋1为显示,赋0为隐藏
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cci);
}
void paint(int xx,int yy)
{
gotoxy(2*yy,xx);
switch(map[xx][yy])
{
case 0:printf(" ");break;
case 1:printf("□");break;
case 5:printf("◎");break;
case 6:printf("△");break;
case 7:printf("●");break;
}
}
void start()//初始化地图数组信息,随机蛇头位置,第一个食物位置
{
int i,j;
for(i=0;i<=kuan-1;i++)
{
map[i][0]=wall;
map[i][chang-1]=wall;
}
for(j=0;j<=chang-1;j++)
{
map[0][j]=wall;
map[kuan-1][j]=wall;
}
for (i=0;i<=kuan-1;i++)
for (j=0;j<=chang-1;j++)
paint(i,j);
gotoxy(64,2);printf("1.a减速//d加速");
gotoxy(64,4);printf("2. esc暂停");gotoxy(65,5);printf(" 任意键继续");

}
int getkey(int ddd)//接收按键根据当前方向按动任意键暂停不响应与运动方向相反的按键
{
char c;
while(c=getch())
{
switch(c)
{
case 72://1
{
if(ddd==2)
return down;
else
return up;
}
case 80://2
{
if(ddd==1)
return up;
else
return down;
}
case 75://3
{
if(ddd==4)
return right;
else
return left;
}
case 77://4
{
if(ddd==3)
return left;
else
return right;
}
case 27:continue;//esc暂停,a减速,d加速
case 97:{t+=10;return ddd;}
case 100:{t-=10;return ddd;}
default:{
return ddd;
}
}
return 0;
}
}

void game()
{
int fd=0,len=1,direction=4,a[100000],b[100000],k,m,kk=0,aa=0,bb=0,i,iii=0;
int sj=0;//sj用来记录吃到的果实的存放其坐标的数组的角标
int zz=0,mm=0,fa[num+2],fb[num+2];
t=250;//全局变量在这里赋值
hi=rand()%(kuan-7)+6;bj=rand()%(chang-8)+5;map[hi][bj]=head;paint(hi,bj);//在一定范围随机蛇头初始位置,身子为左侧3个格子(可以拓展写入game里面)

a[3]=hi;b[3]=bj;//头部位置存放到 a b数组中第四项中

for (i=0;i<3;i++)
{map[hi][bj-1-i]=body;paint(hi,bj-i-1);a[2-i]=hi;b[2-i]=(bj-i-1);}
//身子位置按照尾巴至颈部存放到 0 1 2 项中

k=4;m=4;//数组之后从第四位开始存放蛇头坐标

while(1)
{
while(!kbhit()&&len!=0)//当没有按键输入并且没有撞到墙使得len=0时候进入循环(防止撞到墙后没有按键输入仍终止不了)
{
while (fd<=num)//如果fd<=num 则进入循环随机刷新一个新果实
{
do
{fi=rand()%(kuan-3)+1;fj=rand()%(chang-3)+1;}
while(map[fi][fj]>0);//不在墙或者蛇的身体内
if(fd<20)
{map[fi][fj]=food;paint(fi,fj);fa[zz++]=fi;fb[mm++]=fj;fd++;}
else
{map[fi][fj]=food;paint(fi,fj);fa[sj]=fi;fb[sj]=fj;fd++;}//如果fd=20进来循环,就会把新生成的果实的坐标赋给被上次被吃的数组,便于之后的循环检测
}
switch(direction)
{
case 1: {map[hi][bj]=body;paint(hi,bj);hi--;break;}
case 2: {map[hi][bj]=body;paint(hi,bj);hi++;break;}
case 3: {map[hi][bj]=body;paint(hi,bj);bj--;break;}
case 4: {map[hi][bj]=body;paint(hi,bj);bj++;break;}
}
if ((map[hi][bj]==body)||(map[hi][bj]==wall))//在画出新的头部时刻先判断即将画出的位置是不是map上坐标为身子的位置。是则失败
{gotoxy(30,12);printf("失败了!");len=0;break;}

map[hi][bj]=head;paint(hi,bj);//接上,不是则执行这一步画出头部
a[k++]=hi;b[m++]=bj;kk++;//另设置两个数组记录头部经过的坐标,kk代表头部运行的次数
for(i=0;i<=num;i++)
{
if (hi==fa[i]&&bj==fb[i])//吃到了果实,fd+1,分数+1,长度+1,记录被吃的果实的坐标存放数组的角标
{fd=fd-1;len++;iii++;sj=i;}
}
if(kk>(len-1))//头部每走一步,kk++,删除之前的轨迹坐标所对应的身子,即尾巴。若吃到食物则尾巴保留一次,待头部再次运动则删除。
{
if(map[a[aa]][b[bb]]!=wall)
{
map[a[aa]][b[bb]]=road;
paint(a[aa],b[bb]);
aa++;bb++;
kk--;
}
else
{aa+=9;bb+=9;map[a[aa]][b[bb]]=road;paint(a[aa],b[bb]);kk-=9;}
}
if(len>=18)//*版本代码
{
for (i=1;i<11;i++)
{map[a[k-11-i]][b[m-11-i]]=wall;paint((a[k-11-i]),(b[m-11-i]));}//从脑袋后第十二节开始变成墙
len-=8;
t+=4;
}
gotoxy(64,7);printf("3.分数:%d",iii);
Sleep(t-2*iii);//速度算法有待改进!!!!!!!!
}
if (len==0)//撞墙退出,退出while(1)总循环
break;
direction=getkey(direction);//按键按一下,getch提取并删除输入的字符,所以仍能继续进入while(!kbhit())中循环;
}
}
main()
{
srand(time(NULL));
hidden();
start();
game();
gotoxy(0,0);//锁定屏幕显示
getchar();
}

热心网友 时间:2023-10-21 10:19

能,你不能运行的主要原因是你没有装EasyX

所以没有头文件"graphics.h"

而贪吃蛇大多依靠着个头文件来运行


热心网友 时间:2023-10-21 10:19

能,你不能运行的主要原因是你没有装EasyX

所以没有头文件"graphics.h"

而贪吃蛇大多依靠着个头文件来运行


声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 做贪吃蛇小游戏为什么贪吃蛇的大小要在八十以上才会穿墙? 潜江市除了滴滴还有别的打车软件吗 贪吃蛇小游戏里面的蛇怎么能自动跑起来 微信小程序贪吃蛇怎么不能玩 贪吃蛇大作战好玩吗 美团小游戏贪吃蛇如何进入 怎么画小贪吃蛇和大贪吃蛇和中贪吃蛇 请软件公司开发了一个app不能下载数据最近不能下载数据是什么原因? 微信的英语叫什么? 鎴戣繖鍑犲ぉ鐧藉甫锻埚哜涔崇姸骞跺甫链夊纾锻筹紝杩欐槸涓嶆槸阒撮亾镣庯紵鏄&#xFFFD;摢绉嶉槾阆撶値锛熷簲璇 长的像芹菜,没有味道,这是什么植物?已经有人中毒,求解 wechat的音标,词性,中文是什么? 西安那家动画公司好? 有什么适用于 宠物零售业的收银系统嘛?店铺异地分布在国内各地。 二维动画到哪里学最好啊?? 货车的二级维护要怎么做?要多长时间做一次? 货车二级维护一年一定要做几次吗 用支付宝在网上买东西安全么? 用我的支付宝直接给对方的支付宝打款安全吗? 自制猪油渣怎么做好吃又简单,做法图解分 请问鸡蛋羹怎么做啊 湛江市有什么打车软件可以用, 除了滴滴出行? 韩式鸡蛋羹的做法 JAVA小游戏贪吃蛇如何做的,要知识点说明 谢谢啦。 怎样做鸡蛋羹啊?越详越好 小学生贪吃蛇式跑操引发网友关注,为何需要提高学生对跑操的兴趣? 100行Python代码,轻松完成贪吃蛇小游戏? 鸡蛋羹怎么做好吃啊?要多长时间啊? C语言贪吃蛇小游戏 怎么做鸡蛋羹啊? 五年级作文:贪吃蛇的游戏 求一个完整的,C语言编写的贪吃蛇小游戏。 新三国中刘备是不是真的说了“袁绍只不过是扶不起的阿斗!”这句话? “袁绍只不过是扶不起的阿斗!”出自哪里?新三国的刘备是否说过这句话? 电视剧《新三国》中,刘备说“袁绍是扶不起的阿斗”,还有哪些雷人台词? 新三国里刘备台词“袁绍是个扶不起的阿斗”是在哪一集? 新三国里面有哪些经典的台词啊? 三国演义雷人台词 网上看到有人说新三国有一句著名台词,刘备说“袁绍是扶不起的阿斗”,是真的么?如果是,那是哪集? 新三国演义精选台词