私は C++ で書かれたビデオ ゲームに取り組んでおり、特定の半径に基づいてモンスターのスポーンを作成しようとしています。たとえば、次のような位置を定義するとします。
Position ( X, Y, Z ) Amount ( Value )
そのコードが行うことは、開始点が位置であり、開始点の周りに (Amount) モンスターを配置したい (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 ループ内にいるのは悪いことです。モンスターが指定された位置にスポーンできないことがあるためです。
また、モンスターが隣り合ってスポーンすることもありますが、私は本当にそれを望んでいません。この種のタスクに使用する必要がある数学的アルゴリズムを教えてください。