各位能否来看一下为什么这个贪吃蛇程序,当蛇头碰到食物时,蛇直接穿过的食物,食物也没有刷新(判定头碰食物代码我框出来了)

#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#include<time.h>
#define HEIGHT 30
#define WIDTH 40
#define BLOCK_SIZE 20

int Blocks[HEIGHT][WIDTH]={0};
char moveDirection;
int food_i,food_j;
int isFailure=0;

//移动小蛇及相关处理函数
void moveSnake()
{
int i,j;
for(i=0;i<HEIGHT;i++)
for(j=0;j<WIDTH;j++)
if(Blocks[i][j]>0)
Blocks[i][j]++;
int oldTail_i,oldTail_j,oldHead_i,oldHead_j;
int max=0;
for(i=0;i<HEIGHT;i++)
{
for(j=0;j<WIDTH;j++)
{
if(max<Blocks[i][j])
{
max=Blocks[i][j];
oldTail_i=i;
oldTail_j=j;
}
if(Blocks[i][j]==2)
{
oldHead_i=i;
oldHead_j=j;
}
}
}
int newHead_i=oldHead_i;
int newHead_j=oldHead_j;

if(moveDirection=='W')
    newHead_i=oldHead_i-1;
else if(moveDirection=='S')
    newHead_i=oldHead_i+1;
else if(moveDirection=='A')
    newHead_j=oldHead_j-1;
else if(moveDirection=='D')
    newHead_j=oldHead_j+1;

if(newHead_i>=HEIGHT||newHead_i<0||newHead_j>=WIDTH||newHead_j<0||Blocks[newHead_i][newHead_j]>0)
{
    isFailure=1;
    return;
}

Blocks[newHead_i][newHead_j]=1;


if(newHead_i==food_i&&newHead_j==food_j)
{
    food_i=rand()%(HEIGHT-5)+2;
    food_j=rand()%(WIDTH-5)+2;
}

else
    Blocks[oldTail_i][oldTail_j]=0;

}

//初始化函数
void startup()
{
int i;
Blocks[HEIGHT/2][WIDTH/2]=1;
for(i=1;i<=4;i++)
Blocks[HEIGHT/2][WIDTH/2-i]=i+1;
moveDirection='D';
food_i=rand()%(HEIGHT-5)+2;
food_j=rand()%(WIDTH-5)+2;
initgraph(WIDTHBLOCK_SIZE,HEIGHTBLOCK_SIZE);
setlinecolor(RGB(200,200,200));
BeginBatchDraw();
}

//绘制函数
void show()
{
cleardevice();
int i,j;
for(i=0;i<HEIGHT;i++)
{
for(j=0;j<WIDTH;j++)
{
if(Blocks[i][j]>0)
setfillcolor(HSVtoRGB(Blocks[i][j]10,0.9,1));
else
setfillcolor(RGB(150,150,150));
fillrectangle(j
BLOCK_SIZE,i*BLOCK_SIZE,(j+1)BLOCK_SIZE,(i+1)BLOCK_SIZE);
}
}
setfillcolor(RGB(0,255,0));
fillrectangle(food_i
BLOCK_SIZE,food_j
BLOCK_SIZE,(food_i+1)*BLOCK_SIZE,(food_j+1)*BLOCK_SIZE);
if(isFailure)
{
setbkmode(TRANSPARENT);
settextcolor(RGB(255,0,0));
settextstyle(80,0,_T("宋体"));
outtextxy(240,220,_T("游戏失败"));
}
FlushBatchDraw();
}

//与输入无关的更新函数
void updateWithoutInput()
{
if(isFailure)
return;
static int waitIndex=1;
waitIndex++;
if(waitIndex==10)//每十帧移动一格
{
moveSnake();
waitIndex=1;
}

}

//与输入有关的更新函数
void updateWithInput()
{
if(kbhit()&&isFailure==0)
{
char input=_getch();
if(input=='A'||input=='W'||input=='S'||input=='D')
{
moveDirection=input;
moveSnake();
}
}
}
int main()
{
srand(time(NULL));
startup();
while(1)
{
show();
updateWithoutInput();
updateWithInput();
}

_getch();
closegraph();
return 0;

}