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

时间:2017-12-09 09:12:54

标签: c++ c++11

我目前正在开展一个学校项目,我们必须在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';
}

我已经设置断点来查看究竟发生了什么,以及线条&#39; monsterMove();&#39;多次执行。我真的不知道自己做错了什么。

1 个答案:

答案 0 :(得分:0)

您的代码的一个明显问题是您在playerMove()内调用了playerMove(),并且正如我所看到的那样,您粘贴的代码中没有任何内容可以阻止递归。另外,我在代码中根本找不到你提到的行MonsterMove();,即使这样的行确实存在,你也错过了一个参数,它甚至不会编译。