问题:运行后蛇向右走少一格
#include
#include
#include
#include
#define MAPHEIGHT 26//高度
#define MAPWIDTH 30//宽度
#define SNAKEMAXSIZE 50//宽度
void gotoxy(int x,int y);
void drawmap();
void drawsnake();
void keydown();
void creatfood();
struct
{
int x[SNAKEMAXSIZE];
int y[SNAKEMAXSIZE];
int len;
int key;
int speed;
}snake;
struct
{
int x;
int y;
}food;
int i;
int key;
int changeflag=0;
int foodflag;
int main()
{
drawmap();
drawsnake();
creatfood();
gotoxy(food.x,food.y);
printf("★");
gotoxy(MAPWIDTH*2,MAPHEIGHT);
while(1)
{
Sleep(snake.speed);
keydown();
}
}
void gotoxy(int x,int y)
{
HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord;
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition(handle,coord);
}
void drawmap()
{
int i;
for(i=0;i
gotoxy(i,0);
printf("■");
}
for(i=0;i
gotoxy(0,i);
printf("■");
}
for(i=0;i
gotoxy((MAPWIDTH*2-2),i);
printf("■") ;
}
for(i=0;i
gotoxy(i,MAPHEIGHT);
printf("■");
}
}
void drawsnake()
{
snake.x[0]=MAPWIDTH;
snake.y[0]=MAPHEIGHT/2;
snake.len=3;
snake.speed=300;
gotoxy(snake.x[0],snake.y[0]);//蛇头
printf("■") ;
for(i=1;i
{
snake.x[i]=snake.x[i-1]+2;
snake.y[i]=snake.y[i-1];
gotoxy(snake.x[i],snake.y[i]);
printf("■");
}
gotoxy(MAPWIDTH,MAPHEIGHT/2);
printf("■") ;
gotoxy(MAPWIDTH+2,MAPHEIGHT/2);
printf("■") ;
gotoxy(MAPWIDTH+2+2,MAPHEIGHT/2);
printf("■") ;
}
void keydown()
{
if(_kbhit())
{
fflush(stdin);//清空标准输入缓冲区
key=_getch();
}
if(key=='w'||key=='a'||key=='s'||key=='d'||key=='W'||key=='A'||key=='S'||key=='D')
{
if(key=='w'&&snake.key!='s'||key=='a'&&snake.key!='d'||key=='s'&&snake.key!='w'||key=='d'&&snake.key!='a'||key=='W'&&snake.key!='S'||key=='A'&&snake.key!='D'||key=='S'&&snake.key!='W'||key=='D'&&snake.key!='A')//判断键盘按下的那个按键,只允许wasd有效
{
snake.key=key;//蛇的方向
changeflag=1