0

我正在尝试在游戏区域中放置不同的对象,例如网格,但是我的创建这些对象和位置的方法存在一些问题。我正在尝试将每个新位置存储在列表中,然后将每个新位置与列表中的位置进行比较,然后才能将其用作游戏区域网格中的新位置。我只想使用每个随机位置一次。帮助是preciated!谢谢!

也许有更好的方法来做到这一点?

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));
    }
}
4

1 回答 1

1

我认为您应该考虑使用布尔数组来处理网格:

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
}
于 2012-07-29T13:45:38.723 回答