c语言蛇纸
#包括
#包括
#包括
#包括
#包括
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;
}