c语言蛇纸

//* * * * * *友情提醒:如果想提速,请更改_sleep(500)函数中的参数* * * *。

#包括

#包括

#包括

#包括

#包括

const int H = 8;//地图的高度

const int L = 16;//地图的长度

char游戏地图[H][L];//游戏地图

int键;//按下按钮保存。

int sum = 1,over = 0;//蛇的长度,游戏结束(吃掉自己或者撞墙)

int dx[4] = {0,0,-1,1 };//左、右、上、下方向

int dy[4] = {-1,1,0,0 };

struct Snake//Snake每个节点的数据类型。

{

int x,y;//左侧位置

int now//保存当前节点的方向。0,1,2,3分别是左,右,上,下。

} Snake[H * L];

const char Shead = ' @//蛇头

const char Sbody = ' #//蛇身

const char Sfood = ' *//食物

const char Snode = ' . ';//'.'在地图上被标记为空。

void Initial();//映射的初始化

void Create _ Food();//在地图上随机生产食物

void Show();//刷新显示地图

void Button();//拿出钥匙,判断方向。

void Move();//蛇的运动

void Check _ Border();//检查蛇头是否过线。

void Check_Head(int x,int y);//移动后检查蛇头的位置。

int main()

{

initial();

show();

返回0;

}

Void Initial() //映射的初始化

{

int i,j;

int hx,hy;

系统(“题蛇”);//控制台的标题

memset(游戏地图,'.',sizeof(游戏地图));//初始化映射全部为空“.”

系统(“cls”);

srand(time(0));//随机种子

hx = rand()% H;//产生黑鱼

hy = rand()% L;

GameMap[hx][hy]= Shead;

蛇[0]。x = hx蛇[0]。y = hy

蛇[0]。现在=-1;

create _ Food();//随意生产食物

for(I = 0;我& lth;I++) //地图显示

{

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

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

printf(" \ n ");

}

printf(" \ n小C语言蛇\ n ");

Printf("按任意方向键开始游戏\ n ");

getch();//首先接受一个键,让蛇开始往这个方向走。

button();//拿出钥匙,判断方向。

}

Void Create_Food() //在地图上随机产生食物。

{

int fx,fy;

while(1)

{

FX = rand()% H;

fy = rand()% L;

If(游戏地图[FX] [FY] = ' . ')//不能出现在蛇占据的位置。

{

GameMap[FX][fy]= s food;

打破;

}

}

}

Void Show() //刷新显示地图。

{

int i,j;

while(1)

{

_睡眠(500);//延迟半秒(1000就是1s),即每半秒刷新一次地图。

button();//首先判断键是动的。

move();

If(over) //如果你吃东西或者碰到墙,游戏就结束了。

{

Printf("\n**游戏结束* * \ n ");

printf(" & gt;_ & lt\ n ");

getchar();

打破;

}

系统(“cls”);//清除地图,然后显示刷新后的地图。

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

{

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

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

printf(" \ n ");

}

printf(" \ n小C语言蛇\ n ");

Printf("按任意方向键开始游戏\ n ");

}

}

Void Button() //拿出钥匙,判断方向。

{

if(kbhit()!= 0) //检查当前是否有键盘输入,如果有则返回非零值,否则返回0。

{

while(kbhit()!= 0) //可能有多个键,你要全部取,优先取最后一个。

key = getch();//从控制台中取出密钥,保存在密钥中。

开关(钥匙)

{//左侧

案例75:蛇[0]。现在= 0;

打破;

//右

案例77:蛇[0]。现在= 1;

打破;

//向上

案例72:蛇[0]。现在= 2;

打破;

//向下

案例80:蛇[0]。现在= 3;

打破;

}

}

}

Void Move() //蛇的移动

{

int i,x,y;

int t = sum//保存当前蛇的长度。

//记录蛇头的当前位置,设置为null,蛇头先动。

x = Snake[0]。x;y = Snake[0]。y;游戏地图[x][y] = ' . ';

蛇[0]。x = Snake[0]。x + dx[ Snake[0]。现在];

蛇[0]。y = Snake[0]。y + dy[ Snake[0]。现在];

Check_Border()。//蛇头过线了吗?

Check_Head(x,y);//黑鱼移动后的位置。参数是:蛇头的起始位置。

If(sum == t) //蛇在没有食物的情况下移动。

for(I = 1;我& lt总和;I++) //要从虎头蛇尾的节点向前移动,使用前一个节点作为参考。

{

If(i == 1) //将尾节点设置为null后移动。

游戏地图[蛇[我]。x ][ Snake[i]。y ] = ' . ';

If(i == sum-1) //是蛇头后面的蛇节点,是经过特殊处理的。

{

蛇[我]。x = x

蛇[我]。y = y

蛇[我]。now = Snake[0]。现在;

}

Else //其他蛇去之前的蛇位。

{

蛇[我]。x = Snake[i+1]。x;

蛇[我]。y = Snake[i+1]。y;

蛇[我]。现在=蛇[i+1]。现在;

}

游戏地图[蛇[我]。x ][ Snake[i]。y]= ' # ';//移动后应该设置为' # '蛇体。

}

}

Void Check_Border() //检查蛇头是否过线。

{

if(Snake[0].x 0 ||蛇[0]。x & gt= H

|| Snake[0]。y 0 ||蛇[0]。y & gt= L)

over = 1;

}

Void Check_Head(int x,int y) //检查蛇头移动后的位置。

{

If(游戏地图[snake [0].x] [snake [0]。y] = = ' . ')//为空。

游戏地图[ Snake[0]。x ][ Snake[0]。y]= ' @ ';

其他

If(游戏地图[snake [0].x] [snake [0]。y]= ' * ')//是食物。

{

游戏地图[ Snake[0]。x ][ Snake[0]。y]= ' @ ';

蛇[sum]。x = x//新加入的蛇就是蛇头后面的那条。

蛇[sum]。y = y

蛇[sum]。now = Snake[0]。现在;

游戏地图[蛇[和]。x ][蛇[和]。y]= ' # ';

sum++;

create _ Food();//食物吃完了,马上就要出另一种食物了。

}

其他

over = 1;

}