我正在开发一个用 C++ 编写的视频游戏,我正在尝试根据给定的半径创建怪物产卵,假设我定义了这样的位置:
Position ( X, Y, Z ) Amount ( Value )
该代码所做的是起点是位置,我想在起点周围放置(数量)怪物(X = X-Amount,Y = Y-Amount,X = X+Amount,Y = Y+Amount),每个生成最多有 9 个怪物。
我现在使用的代码很无聊:
// 1000 tries because I'm using random numbers
for (int i = 0; i < 1000; i++)
{
toPlace = centerPos;
toPlace.x = uniform_random(centerPos.x-monsterAmount, centerPos.x+monsterAmount);
toPlace.y = uniform_random(centerPos.y-monsterAmount, centerPos.y+monsterAmount);
if (Monster->CanSpawnAt(toPlace))
{
Monster->Spawn();
break;
}
}
位置计算是使用monsterAmount
(用户定义的怪物数量),所以如果有 3 个怪物,那么它是 -3 后面和 +3 前面的位置。
这很糟糕,因为我使用的是随机值,因此为什么我在 1000 的 for 循环中,因为有时怪物无法在给定位置生成。
有时怪物会彼此相邻生成,我真的不希望这样。我想知道你们是否可以通过告诉我我应该为这类任务使用什么数学算法来帮助我?