更改二维数组值俄罗斯方块风格

时间:2019-05-22 22:40:04

标签: c# unity3d

我有一个二维布尔数组,用于检查列的行是否全部为真。现在,我想检查是否所有行都填入true。我希望该行全为假。然后我把价值放在我之上。然后把它推下来就像俄罗斯方块。这是我制作的伪代码。有人可以给我提示和解释如何做吗?和顺便说一句。如果我用true填充SECOND列。恐怕无论其最低列值如何,第一列也会向下移动。

[SerializeField]private int columns;
[SerializeField]private int rows;
private bool[,] grid;
private bool isRowTrue = true;
private int gridColumnCount = 0;
private int gridRowCount = 0;
private int combo = 0;
// Start is called before the first frame update
void Start()
{
    grid = new bool[columns, rows];
    for (int y = 0; y < grid.GetLength(1); y++)
    {
        for (int x = 0; x < grid.GetLength(0); x++)
        {
            grid[y, x] = false;
        }
    }   
}

// Update is called once per frame
void Update()
{

    CheckArrays();


}

private void CheckArrays()
{
    for (int y = 0; y < grid.GetLength(1); y++)
    {
        for (int x = 0; x < grid.GetLength(0); x++)
        {
            if (grid[y, x] == false)
            {
                isRowTrue = false;
                break;
            }
        }
        if (isRowTrue == true)
        {
            Debug.Log(y + "TH Row Are All True");

            for (int x = 0; x < grid.GetLength(0); x++)
            {
                grid[y, x] = false;
                Debug.Log(grid[y, x]);
            }

          for (int yc = 0; yc < grid.GetLength(1); yc++)
          {
              for (int xc = 0; xc < grid.GetLength(0); xc++)
              {
                 grid[yc, xc] = grid[yc - 1, xc - 1];
              }
          }


        }
        else
        {
            isRowTrue = true;
        }

    }

}

1 个答案:

答案 0 :(得分:0)

如果您没有特定要求将其构建为2d数组,则可能更容易以面向对象的方式进行推理。例如,创建一个Row类,它将容纳一个bool数组并具有一个IsFull()方法,如果整个数组为true,则该方法将返回true。然后,您可以在上面的代码中保存Row的ArrayList。然后,您可以遍历各行,并且只要有row.IsFull()== true,就可以从列表中删除该行,这将为您带来所需的效果。