只是附加信息:这是针对我正在开发的游戏项目。
我正在尝试制作一种有效的随机化算法,在给定可用空间长度的情况下放置多个对象(彼此排列)。
直截了当地说:给定一个长度 = 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;
}
基本上我正在做的是我不断随机地为每个对象找到一个有效的位置。我只是想知道它是否效率低下。另外,我想知道我是否会用这种方法陷入僵局?