这串贪吃蛇的代码不知道为什么一输入w,a,s,d就会自动结束程序,如何解决?

C:\Users\Administrator Desktop\snakegame.exe X
*
after 6.098 seconds with return value 3221225477
水
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
char ch;
int score = 0;
vector<vector<int>> candy;
vector<vector<int>> body;
vector<int> clone_body;
vector<int> head;
void gotoxy(short x, short y)
{
COORD coord = {x, y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void print_candy(int headx , int heady , char ch)
{
int ret = 0;
for(auto x : candy)
{
if(headx == x[0] && heady == x[1])
{
candy.erase(candy.begin() + ret);
clone_body.resize(0);
if(body.size() > 1)
{
clone_body.push_back(body[body.size() - 1][0] + 1);
clone_body.push_back(body[body.size() - 1][1]);
body.push_back(clone_body);
}
else
{
clone_body.push_back(headx+1);
clone_body.push_back(heady);
body.push_back(clone_body);
}
score++;
print_candy(headx,heady,ch);
break;
}
else
{
gotoxy(x[0],x[1]);
cout<<"*";
}
ret++;
}
}
void print_edge()
{
for(int i = 5; i <= 109 ; i++) { gotoxy(i,4); cout << "__"; }
for(int i = 5; i <= 109 ; i++) { gotoxy(i,22); cout << "__"; }
for(int i = 5; i <= 22 ; i++) { gotoxy(5,i); cout << "|"; }
for(int i = 5; i <= 22 ; i++) { gotoxy(110,i); cout << "|"; }
}
int main()
{
int headx = 58 , heady = 13;
print_edge();
for(int i = 0 ; i <= 120 ; i++)
{
int candyx = rand()%(100) + 6 , candyy = rand()%(15)+6;
gotoxy(candyx,candyy);
candy.resize(121);
candy[i].resize(3);
candy[i][0] = candyx;
candy[i][1] = candyy;
cout<<"*";
}
head.push_back(headx);
head.push_back(heady);
gotoxy(headx,heady);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
cout<<":";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
int life = 3;
gotoxy(5,24);
cout << "life : ";
for(int i = 1 ; i <= 3 ; i++) cout << "# ";
gotoxy(5,25);
cout<< "score : " << score;
gotoxy(5,29);
cout << "注意 :不要去边缘!";
gotoxy(5,27);
cout << "请在这里输入指示符(wasd) : ";
while(cin>>ch)
{
Sleep(500);
int judgex = 0;
if(headx < 109 && headx > 5 && heady > 5 && heady < 21)
{
if(ch == 'w') heady-=1;
if(ch == 's') heady+=1;
if(ch == 'a') headx-=1;
if(ch == 'd') headx+=1;
}
if(headx == 109) { headx = 108; life--; }
if(heady == 21) { heady = 20; life--; }
if(heady == 5) { heady = 6; life--; }
if(headx == 5) { headx = 6; life--; }
system("cls");
print_edge();
print_candy(headx , heady , ch);
gotoxy(headx,heady);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
cout<<":";
body.pop_back();
body[0][0] = head[0] , body[0][1] = head[1];
for(auto i = body.size() - 2 ; i >= 1 ; i--)
{
body[i][0] = body[i - 1][0];
body[i][1] = body[i - 1][1];
gotoxy(body[i][0],body[i][1]);
cout<<"+";
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
gotoxy(5,24);
if(life == 0)
{
Sleep(800);
Beep(698,700);
Sleep(1000);
cout << "You lose!" << endl << endl << " 本次得分:" << score << "分!" << endl << endl << endl << endl << endl << endl;
return 0;
}
cout << "life : ";
for(int i = 1 ; i <= life ; i++) cout << "# ";
gotoxy(5,25);
cout<< "score : " << score;
gotoxy(5,29);
cout << "注意 :不要去边缘!";
gotoxy(5,27);
head.resize(0);
head.push_back(headx);
head.push_back(heady);
cout << "请在这里输入指示符(wasd) : ";
}
return 0;
}