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循环,则随机数将始终相同。
答案 0 :(得分:0)
我将提出下一个解决方案,你可以将if语句代码提取到一个新函数&#34; generateRandomMonster&#34;,这样你就可以在for bucle之前调用它一次,并以这种方式减少迭代你可以确保newmonster数组已经有一个怪物而if语句不会破坏你的代码。
我希望这个解决方案可以帮助你。
溴
答案 1 :(得分:0)
你的支票错了。如果碰巧最后两个怪物在同一个位置,那么就停止制造怪物。当然,这不是你想要的。
在你的位置我会运行一个while循环直到newmonster.monsterData.size() == 5
。在循环中,我将制作随机坐标并仅在已创建的怪物的无共享位置时添加怪物。对于那个检查,你需要一个内循环。