贪吃蛇这个程序中蛇向右移动就变短了

问题:运行后蛇向右走少一格
#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