获取列表<>来自具有范围的矩阵

时间:2017-03-23 13:02:59

标签: c# unity3d matrix range

对于学校我正在创建一个基于图块的游戏。在这个游戏中我有一个矩阵,包含董事会的所有游戏对象。如果你选择一个带有单位的图块,我想要读取单位的范围,而不是在这个范围内突出显示它周围的图块,但我该怎么做呢?

int x和int y是网格中图块的位置。 单位是瓷砖上的单位。此方法用于获取单位的范围。

private GameObject[,] grid;
public void unitSelected(int x, int y, GameObject unit)
{
    int rangeTiles = 0;
    Units u = (Units)Enum.Parse(typeof(Units), unit.tag);
    switch (u)
    {
        case Units.Lieutenent:
            Debug.Log("Luitenant");
            lieutenant lieut = unit.GetComponent<lieutenant>();
            rangeTiles = lieut.Movement;
            break;
        case Units.Bom:
            Debug.Log("Not yet implemented, Bom");
            break;

    }
    getTiles(x, y, rangeTiles);
}

private void getTiles(int x, int y, int moves)
{
    List<GameObject> moveTiles = new List<GameObject>();

}

如何获得selectedtile(int x,int y)的范围(移动)中的所有切片?

1 个答案:

答案 0 :(得分:1)

我还没有测试过,但你的循环看起来应该是这样的。

private void getTiles(int x, int y, int moves)
{
    List<GameObject> moveTiles = new List<GameObject>();
    // sweep through horizontally
    for (int i = -moves; i <= moves; i++)
    {
        // at each step horizontally, sweep vertically as far as allowed
        int jRange = moves - Math.Abs(i);
        for (int j = -jRange; j <= jRange; j++)
        {
            // add (i + x, j + y) to moveTiles, maybe skip when (i, j) = (0, 0)?
        }
    }
}

正如谢尔盖的回答所说,记得做范围检查,因为瓷砖不在网格内。