Snake c语言代码
# 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();
}
}
}