繁体   English   中英

如何使它更干净

[英]How to make this more clean

我有很大一部分这样的代码遍历数组

void GetSpawnablePosition() {
    Vector2[] coordX = { Vector2.up, Vector2.down };
    Vector2[] coordY = { Vector2.left, Vector2.right };

    for (int i = 0; i < coordY.Length; i++)
    {
        Vector2[] newArray = new Vector2[enemyGrid.grid[0].Length - 2];

        if (coordY[i] == Vector2.left)
        {
            for (int j = 0; j < enemyGrid.grid[0].Length - 2; j++)
            {
                newArray[j] = new Vector2(0, j+1);
            }
        }

        if (coordY[i] == Vector2.right)
        {
            for (int j = 0; j < enemyGrid.grid[0].Length - 2; j++)
            {
                newArray[j] = new Vector2(enemyGrid.grid[0].Length - 1, j + 1);
            }
        }
        spawnablePosition.Add(coordY[i], newArray);
    }

    for (int i = 0; i < coordY.Length; i++)
    {
        Vector2[] newArray = new Vector2[enemyGrid.grid.Length - 1];

        if (coordX[i] == Vector2.down)
        {
            for (int j = 0; j <= enemyGrid.grid.Length - 2; j++)
            {
                newArray[j] = new Vector2(j+1,0);
            }
        }
        if (coordX[i] == Vector2.up)
        {
            for (int j = 0; j <= enemyGrid.grid.Length - 2; j++)
            {
                newArray[j] = new Vector2(j + 1, enemyGrid.grid[0].Length - 1);
            }
        }

        spawnablePosition.Add(coordX[i], newArray);
    }
}

该代码段应采用网格的索引x和y

https://i.stack.imgur.com/qBJ1T.png

放在这样的字典里

Vector2.up => [[0][1],[0][2],[0][3],[0][4],[0][5]]
Vector2.left=> [[1][0],[2][0],[3][0],[4][0],[5][0]]
Vector2.right=> [[1][6],[2][6],[3][6],[4][6],[5][6]]
Vector2.down=> [[6][1],[6][2],[6][3],[6][4],[6][5]]

我试图对其进行重构以使其更小或更清晰,但实际上,老实说,我找不到能够使大事情变小的好的解决方案。

有人能帮我吗 ?

就像是:

var yLength = enemyGrid.grid[0].Length;
var xLength = enemyGrid.grid.Length;

spawnablePosition.Add(Vector2.left,  Enumerable.Range(1, yLength).Select(y => new Vector2(0, y)).ToArray());            
spawnablePosition.Add(Vector2.right, Enumerable.Range(1, yLength).Select(y => new Vector2(xLength - 1, y)).ToArray());            
spawnablePosition.Add(Vector2.up,    Enumerable.Range(1, xLength).Select(x => new Vector2(x, 0)).ToArray());            
spawnablePosition.Add(Vector2.down,  Enumerable.Range(1, xLength).Select(x => new Vector2(x, yLength - 1)).ToArray());

确保我不会弄乱相应的数组长度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM