贪吃蛇语法有问题 求各位大神帮帮忙
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<time.h>
const char Shead = '@';//蛇头
const char Sbody = '#';//蛇身
const char Sfood = '*';//食物
const char Snode = '.';//地图的每一个node
const int High = 8;//地图的高
const int Long = 16;//地图的宽度
char GameMap[High][Long];//地图
int Key; //按键保存
int Sum = 1;//蛇的结束
int Over = 0; //蛇的生命(死亡)
int dy[4] = {0,0,-1,1};//上下左右
int dx[4] = {1,-1,0,0};
struct Snake //定义蛇的结构体
{
int x;
int y;//位置
int now;//保存当前节点的方向,为0 1 2 3 分别为上下左右
}Snake[High*Long] //蛇的最大大小(node)
void Initial();//地图的初始化
void Create_Food(); //随机构造食物
void Show();//刷新并显示地图
void Button();//取出按键并且判断方向
void Move();// 蛇的移动
void Check_Border();//检查蛇头是否越界
void Check_Head(int x,int y);
int main(void)
{
Initial();
show();
return 0;
}
void Initial()//地图的初始化
{
int i,j;
int hx,hy;
system("title 贪吃蛇");//窗口的标题
memset(GameMap,'.',sizeof(GameMap));//把地图Initial为'.'
system("cls");
srand(time(0));//随即的某个种子
hx = rand()%Long;//产生随即的蛇头
hy = rand()%High;
GameMap[hx][hy] = Shead; //待测试
Snake[0].x = hx;//待测试
Snake[0].y = hy;//初始化随即的蛇头
Snake[0].now = -1;//初始化方向
Create_Food();//随即生成食物
for(i = 0;i < High;i++) //地图的显示
{
for(j = 0;j < Long;j++)
pritnf("%c",GameMap[i][j]);
printf("\n");
}
printf("霸气De蝈蝈★贪吃蛇小游戏!!!\n");
printf("按任意方向键开始游戏\n");
getch();//接受一个按键
Button();//取出输入的按键,并且判断方向
}
void Create_Food()
{
int fx,fy;
while(1)
{
fx = rand()%High;
fy = rand()%Long;
if(GameMap[fx][fy] == '.')//不能出现在蛇的身上
{
GameMap[fx][fy] = Sfood;
break;
}
}
}
void show()//刷新显示地图
{
int i,j;
while(1)
{
sleep(500);//延迟半秒刷新一次地图,1000为1s
Button();//判断方向
Move(); //
if(over)
{
printf("贪吃蛇死亡!\n");
printf("再来一次吧!\n");
getchar();
break;
}
system("cls");//清空地图并且显示地图
for(i = 0;i < High;i++)
{
for(j = 0;j <Long;j++)
{
printf("%c",GameMap[i][j]);
printf("\n");
}
}
printf("霸气De蝈蝈★贪吃蛇小游戏!!!\n");
pritnf("按任意方向键开始游戏\n");
}
}
void Button()
{
if(kbhit =! 0) //kbhit检测是否输入按键,若有则返回一个非零值。
{
while(kbhit =! 0) //可能存在许多的按键,要都取完,以最后一个为主
key = getch;
switch(key)
{
case 75: Snake[0].now = 0;/*左*/
break;
case 77: Snake[0].now = 1;/*右*/
break;
case 72: Snake[0].now = 2;/*上*/
break;
case 80: Snake[0].now = 3;/*下*/
break;
}
}
}
void Move()//蛇的移动
{
int i,x,y;
int t =sum;//保存蛇的节数
x = Snake[0].x; y = Snake[0].y; GameMap[x][y] = '.';//前进后设置蛇头为空
Snake[0].x = Snake[0].x + dx[Snake[0].now];//蛇头的移动
Snake[0].y = Snake[0].y + dy[Snake[0].now];
Check_Border();//判断是否越界
Check_Head(); //判断蛇头的目前坐标参数
if(sum = t)//如果未吃到食物,移动
{
for(i = 1;i < sum; i++)
{
if(i == 1) //尾节点设置为空再移动
GameMap[ Snake[i].x ][ Snake[i].y ] = '.';
if(i = sum - 1)
{
Snake[i].x = x;
Snake[i].y = y;
Snake[i].now = Snake[0].now;
}
else
{
Snake[i].x = Snake[i+1].x;
Snake[i].y = Snake[i+1].y;
Snake[i].now = Snake[i+1].now;
}
GameMap[Snake[i].x][Snake[i].y] = '#';
}
}
void Check_Border() //检查蛇头是否越界
{
if(Snake[0].x < 0 || Snake[0].x >= High
|| Snake[0].y < 0 || Snake[0].y >= Long)
over = 1;
}
void Check_Head()
{
if(GameMap[ Snake[0].x ][ Snake[0].y ] == '.') //为空
GameMap[ Snake[0].x ][ Snake[0].y ] = '@';
else
if(GameMap[ Snake[0].x ][ Snake[0].y ] == '*') //为食物
{
GameMap[ Snake[0].x ][ Snake[0].y ] = '@';
Snake[sum].x = x; //新增加的蛇身为蛇头后面的那个
Snake[sum].y = y;
Snake[sum].now = Snake[0].now;
GameMap[ Snake[sum].x ][ Snake[sum].y ] = '#';
sum++;
Create_Food(); //食物吃完了马上再产生一个食物
}
else
over = 1;
}
qq_33968059
2016/03/13 05:38- 测试
- 游戏
- 点赞
- 收藏
- 回答
满意答案