我有一个while循环,它在我的c ++程序中的第二个线程中独立运行,但是循环结束时没有满足我设置的条件。
我尝试设置一个计数器来跟踪循环运行的次数,每次都不同,从8到数百次不等。
有谁知道为什么会发生这种情况?
while (ghostPosition.X != playerPosition.X && ghostPosition.Y != playerPosition.Y)
{
randomDirection = getRandomNumber(1, 5);
x = ghostPosition.X;
y = ghostPosition.Y;
if (randomDirection == 1)
{
if (ghostPosition.X > 1)
{
COORD oldPosition = { x, y };
COORD moveTo = { --x, y };
updateGraphics(oldPosition, moveTo, ghost);
ghostPosition.X = ghostPosition.X--;
}
}
else if (randomDirection == 2)
{
if (ghostPosition.Y < 84)
{
COORD oldPosition = { x, y };
COORD moveTo = { x, ++y };
updateGraphics(oldPosition, moveTo, ghost);
ghostPosition.Y = ghostPosition.Y++;
}
}
else if (randomDirection == 3)
{
if (ghostPosition.X < 24)
{
COORD oldPosition = { x, y };
COORD moveTo = { ++x, y };
updateGraphics(oldPosition, moveTo, ghost);
ghostPosition.X = ghostPosition.X++;
}
}
else if (randomDirection == 4)
{
if (ghostPosition.Y > 1)
{
COORD oldPosition = { x, y };
COORD moveTo = { x, --y };
updateGraphics(oldPosition, moveTo, ghost);
ghostPosition.Y = ghostPosition.Y--;
}
}
}
内部循环调用的函数:
int Maze::getRandomNumber(int minimum, int maximum)
{
int output;
std::random_device randomDevice;
std::mt19937 mersenneTwister(randomDevice());
std::uniform_real_distribution<double> distribution(minimum, maximum);
return distribution(mersenneTwister);
}
另一个名为(updateGraphics)的函数只是根据传递的参数修改控制台的输出。 (我认为这个功能不是问题)
答案 0 :(得分:2)
我认为你希望这个循环在玩家和鬼位置不同时执行。但这并不是你所定义的条件。当玩家和幽灵X位置不同且玩家和幽灵Y位置不同时,你的循环执行。如果两者相同,则循环将停止。我想你想要OR。
答案 1 :(得分:0)
没有一些调试信息很难说。为什么不在while循环结束前打印ghostPosition和playerPosition的内容并将其发回。
另外,冒着迂腐的风险,你可以通过使用swtich语句而不是大量的if / else语句简单地使用循环逻辑。