我正在尝试在游戏区域中放置不同的对象,如网格,但我的方法有一些问题,即创建此对象和位置。我正在尝试将每个新位置存储在List中,然后将每个新位置与List中的位置进行比较,然后才能将其用作游戏区域网格中的新位置。我只想使用每个随机位置一次。帮助是精确的!谢谢!
也许有更好的方法可以做到这一点?
public void AddItemsToGameArea(ContentManager content)
{
foreach (string buildingPart in contentHouseOne)
{
Vector2 newPosition = NewRandomPosition;
if (!checkPreviousPositions)
{
listHouseParts.Add(new HousePart(content, buildingPart, newPosition));
listUsedPosition.Add(newPosition);
checkPreviousPositions = true;
}
else
{
for (int i = 0; i < listUsedPosition.Count(); i++)
{
// Check??
}
}
}
}
public Vector2 NewRandomPosition
{
get
{
return new Vector2(gridPixels * Game1.random.Next(1, 8), gridPixels * Game1.random.Next(1, 8));
}
}
答案 0 :(得分:1)
我认为你应该考虑使用一组bool来处理网格:
bool occupiedPositions[columns, rows];
因此,当你占用一个网格单元时,你会这样做:
occupiedPositons[i, j] = true;
您还可以生成一个列表,其中包含网格的可用位置,并从中随机获取位置,并在您执行此操作时删除元素:
List<Vector2> emptyCells;
// fill it with your NewRandomPosition() contentHouseOne.Count times
foreach (string buildingPart in contentHouseOne)
{
int positionIndex = random.Next(emptyCells.Count);
Vector2 newPosition = emptyCells[positionIndex];
emptyCells.RemoveAt(positionIndex);
// do yout stuff using newPosition here
}