0

グリッドのようにゲームエリアにさまざまなオブジェクトを配置しようとしていますが、このオブジェクトとその位置を作成するメソッドに問題があります。新しい位置をそれぞれリストに保存してから、新しい位置をリスト内の位置と比較してから、ゲームエリアのグリッド内の新しい位置として使用できるようにしています。それぞれのランダムな位置を1回だけ使用したいと思います。ヘルプが高く評価されています!ありがとう!

おそらくこれを行うためのより良い方法がありますか?

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 に答える