贪吃蛇c语言代码

贪吃蛇c语言代码


2024年5月31日发(作者:)

#include

#include

#include

#include

#include

char gamemap[20][40];//游戏地图大小 20*40

int score=0;//当前分数

//记录蛇的结点

int x[800];//每个结点的行编号

int y[800];//每个结点的列编号

int len = 0;//蛇的长度

//记录水果信息

int fx=;//食物的横坐标

int fy=00;//食物的纵坐标

int fcount=0;//食物的数目

//主要函数操作

void createfood();//生成食物

void PrintgameMap(int x[],int y[]);//画游戏地图

void move(int x[],int y[]);//移动蛇

int main()

{

srand(time(NULL));

//初始化蛇头和身体的位置,默认刚开始蛇长为2

x[len] = 9;

y[len] = 9;

len++;

x[len] = 9;

y[len] = 8;

len++;

createfood();

PrintgameMap(x,y);

move(x,y);

return 0;

}

void createfood()

{

if(0==fcount)

{

int tfx=rand()%18+1;

int tfy=rand()%38+1;

int i,j;

int have=0;//为0表示食物不是食物的一部分

for(i=0;i

{

for(j=0;j

{

if(x[i]==fx&&y[j]==fy)

{

have=1;

break;

}

else

{

have=0;

}

}

if(1==have)//若为蛇的一部分,执行下一次循环

{

continue;

}

else//否则生成新的水果

{

fcount++;

fx=tfx;

fy=tfy;

break;

}

}

}

}

//游戏地图

void PrintgameMap(int x[],int y[])

{

int snake = 0,food=0;

int i, j;

//画游戏地图,并画出蛇的初始位置

for (i = 0; i < 20; i++)

{

for (j = 0; j < 40; j++)

{

if (i == 0 && j >= 1 && j <= 38)

{

gamemap[i][j] = '=';

}

else if (i == 19 && j >= 1 && j <= 38)

{

gamemap[i][j] = '=';

}

else if (j == 0 || j == 39)

{

gamemap[i][j] = '#';

}

else

{

gamemap[i][j] = ' ';

}

//判断蛇是否在当前位置

int k;

for ( k = 0; k < len; k++)

{

if (i == x[k]&&j == y[k])

{

snake = 1;

break;

}

else

{

snake = 0;

}

}

{

if(fcount&&fx==i&&fy==j)

{

food=1;

}

else

{

food=0;

}

}

//若蛇在当前位置

if (1==snake )

{

printf("*");

}

else if(1==food)

{

printf("f");

}

//若蛇不在当前位置并且当前位置没有水果

else

{

printf("%c", gamemap[i][j]);

}

}

printf("n");

}

printf("score:%d",score);

}

//移动

void move(int x[],int y[])

{

char s;

s=getch();

int move=0,beat=0;

while (1)

{

int cx[800];

int cy[800];

memcpy(cx, x, sizeof(int)*len);

memcpy(cy, y, sizeof(int)*len);

//头

if (s=='w')

{

x[0]--;

move=1;

if(x[0]<=0)

{

printf("Game overn");

break;

}

}

else if (s=='s')

{

x[0]++;

move=1;

if(x[0]>=19)

{

printf("Game overn");

break;

}

}

else if (s=='a')

{

y[0] --;

move=1;

if(y[0]<=0)

{

printf("Game overn");

break;

}

}

else if (s=='d')

{

y[0]++;

move=1;

if(y[0]>=39)

{

printf("Game overn");

break;

}

}

//身体

int i;

for ( i = 1; i < len; i++)

{

x[i] = cx[i - 1];

y[i] = cy[i - 1];

}

for(i=1;i

{

if(x[0]==x[i]&&y[0]==y[i])

{

beat=1;

}

else

{

beat=0;

}

}

if(1==beat)

{

printf("Game overn");

break;

}

if(1==move)

{

if(fcount&&x[0]==fx&&y[0]==fy)//如果吃到了果子

{

//拷贝当前蛇头地址到第二个结点

memcpy(x+1,cx,sizeof(int)*len);

memcpy(y+1,cy,sizeof(int)*len);

len++;

fcount--;

fx=0;

fy=0;

score++;

createfood();

}

Sleep(70);

system("cls");

PrintgameMap( x, y);

}

else

continue;

if(kbhit())//判断是否按下按键

{

s=getch();

}

}

}


发布者:admin,转转请注明出处:http://www.yc00.com/web/1717143348a2734419.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信