2016-11-25 127 views
0
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

你应该真正地分开创建“怪物”来检查另一个是否存在于同一位置(例如:有一个函数检查vector中的每个元素,如果它包含一个具有相同'posX'和'posY'的元素值) – UnholySheep

+0

也是多余的。 – Banex

回答

0

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

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

Br。

+0

即使使用一个do-while循环,我也尝试了不同的方法..没有办法。 –

0

您的支票是错误的。如果它发生在最后两个怪物在同一个位置,那就停止制造怪物。当然,那不是你想要的。

在你的地方,我会运行一个while循环,直到newmonster.monsterData.size() == 5。在循环中,我会制作随机坐标并且只有在已经创建的怪物共享位置的时才添加怪物。为了检查你需要一个内部循环。