void move_player(int& x, int& y) {
int old_x, old_y, new_x, new_y;
switch (getch()) {
case 0x31: // miscare stanga
if (current_x>min_x) {
old_x=x;
new_x=x-1;
if (y==1) {
path[1][old_x]=' ';
path[1][new_x]=player;
system("cls");
for (int y=0;y<3;y++) {
for (int x=0;x<20;x++) {
cout << path[y][x];
}
cout << endl;
}
} else if (y==2) {
path[2][old_x]='_';
path[2][new_x]=player;
system("cls");
for (int y1=0;y1<3;y1++) {
for (int x1=0;x1<20;x1++) {
cout << path[y1][x1];
}
cout << endl;
}
}
}
break;
case 0x32:
if (x<max_x) {
old_x=current_x;
new_x=current_x+1;
if (y==1) {
path[1][old_x]=' ';
path[1][new_x]=player;
system("cls");
for (int y2=0;y2<3;y2++) {
for (int x2=0;x2<20;x2++) {
cout << path[y2][x2];
}
cout << endl;
}
} else if (y==2) {
path[2][old_x]='_';
path[2][new_x]=player;
system("cls");
for (int y3=0;y3<3;y3++) {
for (int x3=0;x3<20;x3++) {
cout << path[y3][x3];
}
cout << endl;
}
}
}
break;
case 0x33:
if (y>min_y) {
old_y=y;
new_y=y-1;
path[old_y][x]='_';
path[new_y][x]=player;
system("cls");
for (int y4=0;y4<3;y4++) {
for (int x4=0;x4<20;x4++) {
cout << path[y4][x4];
}
cout << endl;
}
}
break;
case 0x34:
if (y<max_y) {
old_y=y;
new_y=y+1;
path[old_y][x]=' ';
path[new_y][x]=player;
system("cls");
for (int y5=0;y5<3;y5++) {
for (int x5=0;x5<20;x5++) {
cout << path[y5][x5];
}
cout << endl;
}
}
}
x=new_x;
y=new_y;
}
这是在二维空间中移动玩家的功能。
它由一个我声明为char path[3][20]
的数组表示,玩家只能在path[1][20]
或path[2][20]
中移动。数组的第一层只是由一堆线表示,有点设置地图的边界。顺便说一下,玩家从path[2][0]
或左下角开始。
(我无法在起始位置向左或向下移动,只能向右或向上移动)
问题是,当我运行它时,我可以正确地移动它一次,但是当我尝试向左或向右移动时它什么也没做,当我尝试向上或向下移动控制台时frezees,它退出。
我该如何解决?