函数被多次执行,同时调用一次

Function gets executed multiple times, while called once

本文关键字:调用 一次 执行 函数      更新时间:2023-10-16

我目前正在从事学校项目,我们必须在C 控制台应用程序中制作游戏。目前,我在AI移动方面遇到了一些问题。因此,一旦玩家移动,机器人就可以行动。但是由于某种原因,该功能被多次执行。

机器人移动的功能(monstermove):

void playerMove() {
COORD playerCord = { playerX,playerY }; 
memset(map3, 0, sizeof(map3));
int c = 0;
switch ((c = _getch())) {
case KEY_UP:
    if (map[playerY-1][playerX] == ' ')
    {
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), playerCord);
        cout << " ";
        map[playerY][playerX] = ' ';
        playerY--;
    }
    break;
case KEY_DOWN:
    if (map[playerY + 1][playerX] == ' ')
    {
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), playerCord);
        cout << " ";
        map[playerY][playerX] = ' ';
        playerY++;
    }
    break;
case KEY_LEFT:
    if (map[playerY][playerX-1]== ' ')
    {
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), playerCord);
        cout << " ";
        map[playerY][playerX] = ' ';
        playerX--;
    }
    break;
case KEY_RIGHT:
    if (map[playerY][playerX + 1] == ' ')
    {
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), playerCord);
        cout << " ";
        map[playerY][playerX] = ' ';
        playerX++;
    }
    break;
default:
    break;
}
monsterMove(1);
map[playerY][playerX] = 157;
COORD playerCord2 = { playerX,playerY };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), playerCord2);
cout << "I";
playerMove();
}

功能本身:

void monsterMove(int moves) {
map[monsterY][monsterX] = ' ';
int row[] = { -1, 0, 0, 1 };
int col[] = { 0, -1, 1, 0 };
int toMove =BFS(map, playerX, playerY, monsterX, monsterY)-moves;
COORD monsterCoord2 = { monsterX,monsterY};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), monsterCoord2);
cout << ' ';
while (map3[monsterY][monsterX] != toMove)
{
    for (int k = 0; k < 4; k++)
    {
        if ((map3[monsterY + col[k]][monsterX + row[k]] == map3[monsterY][monsterX] -1) && !( map3[monsterY][monsterX] == toMove))
        {
            monsterX = monsterX+ row[k];
            monsterY =monsterY+ col[k]; 
        }
    }
}
COORD monsterCoord = { monsterX,monsterY };
map[monsterY][monsterX] = 157;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), monsterCoord);
cout << 'M';
}

我放了断点以查看到底发生了什么,而" monstermove();被多次执行。我真的不明白我在做错什么。

您的代码一个明显的问题是,您在playerMove()内调用playerMove(),正如我所看到的那样,您距离您粘贴的代码很远,没有什么可以阻止递归的。另外,我根本没有在代码中提到的MonsterMove();行,即使确实存在这样的行,您也缺少一个参数,甚至不会编译。