C++编写贪吃蛇代码后直接输出game over并且蛇不动是为什么

代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#include<time.h>
#include <stdlib.h>
#undef UNICODE
#undef _UNICODE
//坐标属性
typedef struct Point
{
int x;
int y;
}MYPOINT;
//蛇的属性
struct Snake
{
MYPOINT xy[100];
int num;
char position;
}snake;
//食物的属性
struct Food
{
MYPOINT foodxy;//食物坐标
int flag;//标记
int grade;
}food;
HWND hwnd = NULL;
enum position { up, down, left, right };
//初始化蛇
void Initiatesnake() {
snake.xy[0].x = 20; // 蛇头
snake.xy[0].y = 0;
snake.xy[1].x = 10; // 蛇身第一段
snake.xy[1].y = 0;
snake.num = 2; // 初始长度为2,因为只有头和一个身体部分
snake.position = right;
}
//初始化食物
//void Initiatefood()
//{
// srand((unsigned int)time(NULL));
// food.foodxy.x = rand() % 80 * 10;
// food.foodxy.y = rand() % 60 * 10;
// food.flag = 1;
// for (int i = 0; i < snake.num; i++)
// {
// if (food.foodxy.x == snake.xy[i].x && food.foodxy.y == snake.xy[i].y)
// {
// food.foodxy.x = rand() % 80 * 10;
// food.foodxy.y = rand() % 60 * 10;
// }
// }
//}
void Initiatefood() {
srand((unsigned int)time(NULL));
do {
food.foodxy.x = rand() % 80 * 10;
food.foodxy.y = rand() % 60 * 10;
} while (food.foodxy.x == snake.xy[0].x && food.foodxy.y == snake.xy[0].y); // 确保食物不与蛇头重叠
food.flag = 1;
}
//画蛇
void Drawsnake()
{
for (int i = 0; i < snake.num; i++)
{
setlinecolor(BLACK);
setfillcolor(BLUE);
fillrectangle(snake.xy[i].x, snake.xy[i].y, snake.xy[i].x + 10, snake.xy[i].y + 10);
}
}
//画食物
void Drawfood()
{
setlinecolor(BLACK);
setfillcolor(RED);
fillrectangle(food.foodxy.x , food.foodxy.y, food.foodxy.x + 10, food.foodxy.x + 10);
}
//移动蛇
void Movesnake()
{
//移动
for (int i = snake.num - 1; i > 0; i--)
{
snake.xy[i].x = snake.xy[i - 1].x;
snake.xy[i].y = snake.xy[i - 1].y;
}
//蛇头移动
switch (snake.position)
{
case up:
snake.xy[0].y -= 10;
break;
case down:
snake.xy[0].y += 10;
break;
case left:
snake.xy[0].x -= 10;
break;
case right:
snake.xy[0].x += 10;
break;
default :
break;
}
}
//按键控制
void Keydown()
{
char Key = _getch();
if (Key == 32)
{
while (_getch() != 32);
}
switch (Key)
{
case 'w':
case 'W':
if (snake.position != down)
{
snake.position = up;
}
break;
case 's':
case 'S':
if (snake.position != up)
{
snake.position = down;
}
break;
case 'a':
case 'A':
if (snake.position != right)
{
snake.position = left;
}
break;
case 'd':
case 'D':
if (snake.position != left)
{
snake.position = right;
}
break;
}
}
//吃食物
void Eatfood()
{
if (snake.xy[0].x == food.foodxy.x && snake.xy[0].y == food.foodxy.y)
{
food.flag = 0;
snake.num++;
food.grade += 10;
}
}
//显示分数
void Showgrade()
{
char grade[100] = "";
sprintf_s(grade, "分数:%d", food.grade);
setbkmode(TRANSPARENT);
settextcolor(LIGHTBLUE);
outtextxy(650, 30, grade);
}
//游戏结束
int SnakeDie()
{
if (snake.xy[0].x < 0 || snake.xy[0].x >800 || snake.xy[0].y < 0 || snake.xy[0].y > 600)
{
printf("Snake died due to hitting the wall.\n");
MessageBox(hwnd,"撞墙了,游戏结束!", "撞墙警告", 0);
return 1;
}
for (int i = 1; i < snake.num; i++)
{
if (snake.xy[0].x == snake.xy[i].x && snake.xy[0].y == snake.xy[i].y)
{
printf("Snake died due to self-collision.\n");
MessageBox(hwnd, "自杀了,游戏结束!", "自杀警告", 0);
}return 1;
}
return 0;
}
int main()
{
hwnd = initgraph(800, 600);
setbkcolor(WHITE);
cleardevice();
Initiatesnake();
Initiatefood();
while (true)
{
printf("Game Loop Iteration\n");
cleardevice();
Drawsnake();
Movesnake();
Drawfood();
Eatfood();
Showgrade();
int temp = SnakeDie();
if (temp)
{
printf("Game Over Detected\n"); // 游戏结束时的输出
break;
}
if (food.flag == 0)
{
Initiatefood();
}
if (_kbhit())
{
Keydown();
}
Sleep(80);
}
_getch();
closegraph();
system("pause");
return 0;
}