首页 > 编程知识 正文

贪吃蛇游戏编程c语言(c语言贪吃蛇原理)

时间:2023-05-05 05:06:10 阅读:103300 作者:1949

送餐的基本思路是在地图上随机找一个没有蛇和障碍物的地方,然后将这个地方的地图数组值标记为-1(之前我们让空地为0,障碍物为1)。

让我们写一个函数来判断一个点是否满足上述条件。

Int check(int ii,int jj) //要判断食物是否可以放在这个点,可以放回1,但不能放回0{ if(a[ii][jj]==1) //如果有障碍,返回0。

返回0;int I;for(I=0;isLength(一)

{if(ii==s[i]0jj==s[i][1]) //如果与其中一个蛇体重合,将返回0。

返回0;

}如果(ii==0 | | ii==h-1 | | | jj==0 | | jj==w-1)//如果它在边界之上,则返回0。

返回0;返回1;//最终过滤的点是合格的点}要使用随机数,首先

#包含stdlib.h然后,因为你想根据时间设置随机数种子,你必须

#includetime.h在init函数中编写这段代码。

srand((无符号)时间(NULL));//把随机数种子设置到现在的时间,然后写一个食物函数,这样就可以放一个食物进去了。

空食物()

{ int i,j;做

{

I=兰德()% H;//生成一个0到h-1之间的数字

j=兰德()% W;

}while(检查(I,j)=0);//生成点,直到满足条件。

a[I][j]=-1;//标记为食物gotoxy(i,j);

printf(' $ ');//绘制食物}然后在主中的循环前调用一次食物,这样在游戏开始时就有了食物。然后检查黑鱼是否与食物重叠,如果重叠,就叫一次食物,放入一个食物。

int main()

{

init();//程序开始时的初始化操作

draw map();//地图食品();而(1)

{

drawing();//画一条蛇

睡眠(等待时间);//等待一段时间键();

move();//移动蛇(主要是修改蛇体阵的数据)

如果(a[s[0][0]][s[0][1]]=-1)//如果蛇头碰到食物,再次放入食物,将食物点重置为0 {

食物();

a[s[0][0]][s[0][1]]=0;

}

}

getchar();返回0;

}来看看效果。

截至目前的代码:

# includes dio . H # includes dlib . H # includes time . H # includes windows . H #定义h23 #定义w75 #定义wait _ time 500//定义方向#定义up0 #定义down1 #定义left2 #定义right 3 in ta[H][//映射数组int s[H * W][2];//Snake坐标数组int sLength//蛇在方向上的长度;//Snake方向void init() //程序开头的初始化操作{

srand((无符号)时间(NULL));//将随机数种子设置为当前时间

CONSOLE _ CURSOR _ INFO CURSOR _ INFO={ 1,0 };

SetConsoleCursorInfo(GetStdHandle(STD _ OUTPUT _ HANDLE),cursor _ info);//隐藏徽标

int i,j;for(I=0;iH;(一)

{

a[I][0]=1;//让第一列为1

a[I][W-1]=1;//让最后一列为1}表示(j=0;jW;j)

{

a[0][j]=1;//让第一个行为1

a[H-1][j]=1;//让最后一个行为1}

sLength=4;//让蛇的初始长度为4

s[0][0]=H/2;

s[0][1]=W/2;//给黑鱼的坐标赋值

for(I=1;i4;(一)

{

s[I][0]=s[0][0]I;

s[I][1]=s[0][1];//给出蛇身的初始坐标}

方向=向上;

}void gotoxy(int i,int j) //移动光标{

坐标位置={j,I };

SetConsoleCursorPosition(GetStdHandle(STD _ OUTPUT _ HANDLE),位置);

}int check(int ii,int jj) //判断此时是否可以放食物。可以放回1,但不能放回0{如果(a[ii][jj]==1) //有障碍,返回0。

返回0;int I;for(I=0;isLength(一)

{if(ii==s[i][0]jj==s[i][1]) //如果与其中一个蛇体重合,将返回0。

返回0;

}如果(ii==0 | | ii==h-1 | | | jj==0 | | jj==w-1)//如果它在边界之上,则返回0。

返回0;返回1;//最终过滤后,符合条件的点数为}void food()

{ int i,j;做

{

I=兰德()% H;//生成一个0到h-1之间的数字

j=兰德()% W;

} while(检查(I,j)=0);//生成点,直到满足条件。

a[I][j]=-1;//标记为食物gotoxy(i,j);

printf(' $ ');//绘制食物}void drawMap() //绘制地图{

gotoxy(0,0);int i,j;for(I=0;iH;(一)

{ for(j=0;jW;J) //Double for循环遍历数组{if(a[i][j]==0) //输出0的空格。

printf(' ');Else //是1输出#

printf(' # ');

}

printf(' n ');//别忘了换行}

}void move()

{ int I;

gotoxy(s[sLength-1][0],s[SLength-1][1]);

printf(' ');//在尾巴上画一个空格擦掉。

对于(I=Slength-1;i0;i - ) //从尾巴开始,每一个点的位置等于它前面一个点的位置{

s[I][0]=s[I-1][0];

s[I][1]=s[I-1][1];

}开关(方向)

{案例UP:

s[0][0]-;打破;下套管:

s[0][0];打破;左盒:

s[0][1]-;打破;右:号案件

s[0][1];打破;

}

}void drawSnake() //画蛇{ int I;for(I=0;isLength(一)

{

gotoxy(s[i][0],s[I][1]);//移动关标到蛇的坐标

printf(' @ ');//在这个位置画蛇}

}无效键()

{ if(kbhit()!=0) //如果有键盘输入{ char inwhile(!kbhit()==0) //如果玩家输入了多个按键,以最后一个按键为准

in=getch();开关(接通)

{案例w':案例W': if(方向!=DOWN) //不能缩头吧。

方向=向上;打破;案例s':案例S': if(方向!=向上)

方向=向下;打破;案例A':案例A': if(方向!=右)

方向=左;打破;案例d':案例D': if(方向!=左)

方向=右;打破;

}

}

}int main()

{

init();//程序开始时的初始化操作

绘制地图();//画地图食物();而(1)

{

绘图();//画蛇

睡眠(等待时间);//等待一段时间key();

move();//移动蛇(主要是修改蛇身数组的数据)

if(a[s[0][0]][s[0][1]]===-1)//如果蛇头碰到食物,就重新投放食物,并且把食物点重置为0 {

食物();

a[s[0][0]][s[0][1]]=0;

}

}

getchar();返回0;

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。