Изменение значения двумерного массива в стиле тетрис - PullRequest
0 голосов
/ 23 мая 2019

У меня есть 2d логический массив, который проверяет, все ли строки столбцов истинны.Прямо сейчас я хочу проверить это, если строка заполнена всем истинным.Я хочу, чтобы этот ряд стал ложным.и тогда я беру значение выше меня.и запихнуть это.так же, как тетрис.это мой псевдокод, который я сделал.Может ли кто-нибудь дать мне подсказку и объяснение о том, как это сделать?и кстати.если я заполнил ВТОРОЙ столбец с true.Боюсь, что первый столбец также сместится вниз независимо от его самого низкого значения столбца.

[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 голосов
/ 23 мая 2019

Если у вас нет особых требований для построения этого как 2d-массива, это может быть проще рассуждать более объектно-ориентированным способом.Например, создайте класс Row, который будет содержать массив bool и иметь метод IsFull (), который возвращает true, если весь массив равен true.Тогда вы можете держать ArrayList of Row в своем коде выше.Затем вы можете перебирать строки и просто удалять строку из списка всякий раз, когда row.IsFull () == true, это должно дать вам эффект, который вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...