追加情報:これは私が取り組んでいるゲームプロジェクト用です。
使用可能なスペースの長さを指定して、複数のオブジェクトを(互いに並べて)配置する効率的なランダム化アルゴリズムを作成しようとしています。
問題に直接:長さ= lengthOfAreaの使用可能なスペース、および配置するオブジェクトの数= numObjectsが与えられます。ここで、各オブジェクトの長さは、lengthObject =(lengthOfArea / 2)/numObjectsです。(そのため、オブジェクトが占めるスペースの合計量は、使用可能な長さのスペースの半分になります)。
各オブジェクトの中心位置を探して、その配列を返すことになっています。
これが私の現在の試みです:
public int[] FindObjectPositions(int lengthOfArea, int numObjects, Random random)
{
int lengthOfObject = (lengthOfArea / 2) / numObjects;
int[] positionsPicked = new int[numObjects];
int minPosition = lengthObject / 2;
int maxPosition = lengthOfArea - (lengthObject / 2);
for (int i = 0; i < numObjects; i++)
{
int newPosition;
do
{
newPosition = minPosition + random.Next(maxPosition - minPosition);
} while (!IsPositionValid(positionsPicked, newPosition, lengthObject));
positionsPicked[i] = newPosition;
}
return positionsPicked;
}
public bool IsPositionValid(int[] positionsPicked, int newPosition, int lengthObject)
{
for (int i = 0; i < positionsPicked.Length; i++)
{
if (Math.Abs(positionsPicked[i] - newPosition) <= (lengthObject / 2))
return false;
}
return true;
}
基本的に私がしていることは、各オブジェクトの有効な位置を常にランダムに見つけていることです。非効率的かどうか疑問に思っています。また、この方法でデッドロックに達する可能性があるのではないかと思います。