C# 将新的Vector2位置与以前的Vector2位置进行比较

C# 将新的Vector2位置与以前的Vector2位置进行比较,c#,xna,xna-4.0,C#,Xna,Xna 4.0,我试图在游戏区域中放置不同的对象,就像网格一样,但是我的方法在创建这些对象和位置时遇到了一些问题。我试图将每个新位置存储在一个列表中,然后将每个新位置与列表中的位置进行比较,然后才可以将其用作游戏区域网格中的新位置。我只想使用每个随机位置一次。帮助是宝贵的!谢谢 也许有更好的方法可以做到这一点 public void AddItemsToGameArea(ContentManager content) { foreach (string buildingPart in contentHo

我试图在游戏区域中放置不同的对象,就像网格一样,但是我的方法在创建这些对象和位置时遇到了一些问题。我试图将每个新位置存储在一个列表中,然后将每个新位置与列表中的位置进行比较,然后才可以将其用作游戏区域网格中的新位置。我只想使用每个随机位置一次。帮助是宝贵的!谢谢

也许有更好的方法可以做到这一点

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));
    }
}
public void AddItemsToGameArea(ContentManager内容)
{
foreach(contentHouseOne中的字符串buildingPart)
{
Vector2 newPosition=NewRandomPosition;
如果(!checkPreviousPositions)
{
添加(newhousepart(content,buildingPart,newPosition));
listUsedPosition.Add(newPosition);
checkPreviousPositions=true;
}
其他的
{
对于(int i=0;i
我认为您应该考虑使用一个布尔数组来处理网格:

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
}
列出空细胞;
//用NewRandomPosition()contentHouseOne填充它。计算次数
foreach(contentHouseOne中的字符串buildingPart)
{
int positionIndex=random.Next(emptyCells.Count);
Vector2 newPosition=emptyCells[positionIndex];
清空细胞。移除(位置索引);
//你在这里用newPosition做东西吗
}

嗨!谢谢你的回答!如果我使用的是占用位置[I,j]=true;我必须先将循环中的所有网格位置设置为false吗?C#应该自动执行此操作,但请尝试一下,我不能确定。