Snake c语言代码

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

# include & ltWindows.h & gt

# include & ltconio.h & gt

# include & lttime.h & gt

char游戏地图[20][40];//游戏地图尺寸20*40

int得分= 0;//当前分数

//记录蛇的节点

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

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

int len = 0;//蛇的长度

//记录水果信息

int FX = 0;//食物的横坐标

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

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

//主功能操作

void create food();//生产食物

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++;

create food();

PrintgameMap(x,y);

移动(x,y);

返回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;我& ltleni++)

{

for(j = 0;j & ltlenj++)

{

if(x[I]= = FX & amp;& ampy[j]==fy)

{

have = 1;

打破;

}

其他

{

have = 0;

}

}

If(1==have)//如果是蛇的一部分,执行下一个循环。

{

继续;

}

Else//否则会产生新的果实。

{

fcount++;

fx = tfx

fy = tfy

打破;

}

}

}

}

//游戏地图

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

{

int snake = 0,food = 0;

int i,j;

//绘制游戏地图,画出蛇的初始位置。

for(I = 0;我& lt20;i++)

{

for(j = 0;j & lt40;j++)

{

if(I = = 0 & amp;& ampj & gt= 1。& ampj & lt= 38)

{

gamemap[I][j]= ' = ';

}

else if(I = = 19 & amp;& ampj & gt= 1。& ampj & lt= 38)

{

gamemap[I][j]= ' = ';

}

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

{

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

}

其他

{

gamemap[I][j]=“”;

}

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

int k;

for(k = 0;k & ltlenk++)

{

if(I = = x[k]& amp;& ampj == y[k])

{

snake = 1;

打破;

}

其他

{

snake = 0;

}

}

{

if(fcount & amp;& amp外汇= = i & amp& ampfy==j)

{

食物= 1;

}

其他

{

食物= 0;

}

}

//如果蛇在当前位置

if (1==snake)

{

printf(" * ");

}

else if(1==food)

{

printf(" f ");

}

//如果蛇不在当前位置,并且当前位置没有果实。

其他

{

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

}

}

printf(" \ n ");

}

printf("分数:%d ",分数);

}

//移动

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]& lt;=0)

{

printf("游戏结束\ n ");

打破;

}

}

else if (s=='s ')

{

x[0]++;

move = 1;

if(x[0]& gt;=19)

{

printf("游戏结束\ n ");

打破;

}

}

else if (s=='a ')

{

y[0]-;

move = 1;

if(y[0]& lt;=0)

{

printf("游戏结束\ n ");

打破;

}

}

else if (s=='d ')

{

y[0]++;

move = 1;

if(y[0]& gt;=39)

{

printf("游戏结束\ n ");

打破;

}

}

//正文

int I;

for(I = 1;我& ltleni++)

{

x[I]= CX[I-1];

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

}

for(I = 1;我& ltlenI++)//如果咬自己,

{

if(x[0]= = x[I]& amp;& ampy[0]==y[i])

{

beat = 1;

}

其他

{

节拍= 0;

}

}

if(1 = =节拍)

{

printf("游戏结束\ n ");

打破;

}

if(1==move)

{

if(fcount & amp;& ampx[0]= = FX & amp;& ampY[0]==fy)//如果你吃了水果,

{

//将当前蛇头地址复制到第二个节点。

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

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

len++;

fcount-;

FX = 0;

fy = 0;

得分++;

create food();

}

睡眠(70);

系统(“cls”);

PrintgameMap( x,y);

}

其他

继续;

If(kbhit())//确定是否按键。

{

s = getch();

}

}

}