C ++ While循环意外结束

黑暗风暴51

我有一个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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章