繁体   English   中英

在随机位置产生怪物

[英]Spawning monsters at random locations

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语句代码提取到新函数“ generateRandomMonster”中,这样​​就可以在for bucle之前调用一次并减少一次迭代,这样就可以确保newmonster数组已经存在有一个怪物,而if语句不会破坏您的代码。

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

Br。

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

在您的位置,我会运行一会儿循环,直到newmonster.monsterData.size() == 5为止。 在循环中,仅当所有已创建的怪物都没有共享位置时,我才会随机坐标并添加怪物。 为此,您需要一个内部循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM