在随机位置产卵怪物

Spawning monsters at random locations

本文关键字:怪物 位置 随机      更新时间:2023-10-16
std::string monsterNames[2] {"Weezer", "Leppin"};
for (int vecID = 1; vecID < 5; ++vecID)
{
    if(newmonster.monsterData[vecID-1].posX != newmonster.monsterData[vecID].posX && newmonster.monsterData[vecID-1].posY != newmonster.monsterData[vecID].posY)
    {
        int randIndex = rand()% 2;
        int randPosX = rand()% 3;
        int randPosY = rand()% 3;
        newmonster.CreateMonster(monsterNames[randIndex], randPosX, randPosY);
        newmonster.monsterData.push_back(newmonster);
    }
    else
    {
        continue;
    }
}

是的,由于IF语句,此代码不运行。直到语句之后才创建怪物,因此数组索引不超出范围。基本上,该程序随机将怪物名称和坐标随机,并且所有这些都可以很好地工作,而无需if语句。但是,我需要检查一个位置是否已经存在怪物,如果不存在,请重新运行循环。如何以更明智的方式进行此操作?XD如果我没有for循环,那么随机数将始终相同。

我将提出下一个解决方案,您可以将if语句代码提取到新功能" GeneratorAndommonster"中,因此您可以在For Bucle之前调用一次,并在一个中减少迭代,通过这种方式,您可以确保Newmonster数组已经有一个怪物,并且IF语句不会破坏您的代码。

我希望此解决方案对您有所帮助。

br。

您的支票是错误的。如果碰巧最后两个怪物位于同一位置,请停止制作怪物。当然,这不是您想要的。

在您的位置,我会运行一段循环直到newmonster.monsterData.size() == 5。在循环中,我只有在已经创建的怪物共享位置的 none 的情况下,才会进行随机坐标并添加怪物。为此,您需要一个内部循环。