如何修复当前上下文中不存在的名称?

问题描述 投票:0回答:1

我正在尝试在游戏板上的空闲位置随机生成游戏对象。我创建了一个函数来获取空闲的随机位置。该代码向我抛出一个错误...

int getRandPos()
        {
            for (int i = 0; i < 9; i++)
            {
                i = Random.Range(0, 8);
                if (player[i] == Seed.EMPTY)
                {
                    break;
                }
            }
            return i;
        }

错误:当前上下文中不存在名称“i” 我已经用 int 关键字初始化了它,并在 for 循环中使用了大括号,那么为什么仍然存在错误?我该如何修复它?非常感谢你

编辑:我的玩家对象的代码

public Seed[] player = new Seed[9];
c# unity-game-engine for-loop
1个回答
0
投票

根本原因是

i
是在循环内初始化的,所以你不能在循环外引用它。如果你只想找到一个随机的空位,你可以循环直到找到一个:

int getRandPos()
{
    int pos = -1;
    while(pos < 0)
    {
        i = Random.Range(0, 8);
        if (player[i] == Seed.EMPTY)
        {
            break;
        }
    }
    return pos;
}

但是如果没有空位,这将无限循环。另一种选择是收集所有空槽并随机选择一个:

int getRandPos()
{
    List<int> emptySlots = new List<int>();
    for (int i = 0; i < 9; i++)
    {
        if (player[i] == Seed.EMPTY)
        {
            emptySlots.Add(i);
        }
    }
    return emptySlots[Random.Range(0, emptySlots.Length)];
}

如果没有空位,我会留给你决定该怎么做...

© www.soinside.com 2019 - 2024. All rights reserved.