我有一个while循环,它在我的c ++程序的第二个线程中独立运行,但是循环结束时不满足我设置的条件。
我尝试设置一个计数器来跟踪循环运行了多少次,并且每次循环都不同,从八次到数百次不等。
有谁知道为什么会这样?
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)的其他函数只是根据传递的参数来修改控制台的输出。(我认为这个功能不是问题)
我认为您希望在播放器和幻影位置不同时执行此循环。但这不是您定义的条件。当播放器和Ghost X位置不同且播放器和Ghost Y位置不同时,将执行循环。如果两者相同,则循环将停止。我认为您想要OR。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句