在随机位置产卵怪物

时间:2016-11-25 10:23:46

标签: c++ loops vector

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循环,则随机数将始终相同。

2 个答案:

答案 0 :(得分:0)

我将提出下一个解决方案,你可以将if语句代码提取到一个新函数&#34; generateRandomMonster&#34;,这样你就可以在for bucle之前调用它一次,并以这种方式减少迭代你可以确保newmonster数组已经有一个怪物而if语句不会破坏你的代码。

我希望这个解决方案可以帮助你。

答案 1 :(得分:0)

你的支票错了。如果碰巧最后两个怪物在同一个位置,那么就停止制造怪物。当然,这不是你想要的。

在你的位置我会运行一个while循环直到newmonster.monsterData.size() == 5。在循环中,我将制作随机坐标并仅在已创建的怪物的共享位置时添加怪物。对于那个检查,你需要一个内循环。