函数被多次执行,同时调用一次
Function gets executed multiple times, while called once
我目前正在从事学校项目,我们必须在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();
行,即使确实存在这样的行,您也缺少一个参数,甚至不会编译。
相关文章:
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 为什么 zlib 放气初始化调用一次不起作用?
- 什么是仅调用一次并调用参数的控制台应用
- 谷歌基准测试,如何只调用一次代码?
- Android JNI RegisterNatives:对所有内容调用一次,或者每个函数调用一次
- 系统调用:一次和多次,哪个更好?
- C++菱形问题 - 如何仅调用一次基方法
- 函数被多次执行,同时调用一次
- 只为NOT STATIC类的EACH对象调用一次方法
- 通过调用一次新运算符大容量分配对象
- Boost::asio::async_write,处理程序只调用一次
- 为什么析构函数被调用两次,而构造函数只被调用一次
- 强制子类实现并调用(一次)方法
- 等待中的谓词在循环中使用notify时只调用一次
- boost::future-是否保证wait_callback只被调用一次
- 为什么这个函数只被调用一次
- Qpid质子on_sendable只被调用一次
- 每次选择参数时调用一次的静态变量和函数
- 如何只执行一次方法代码,尽管每帧调用一次
- 在c++中调整vector大小时调用一次类构造函数