Сканируйте столбец и строку один за другим, прежде чем переходить к другому столбцу. МНОГОМЕРНАЯ Массив C # (UNITY) - PullRequest
0 голосов
/ 24 мая 2018

Привет! Я создал скрипт, который будет сканировать все Column и Row, проблема в том, что мне нужно сначала отсканировать все данные в этом конкретном столбце, а затем перейти к следующему.Вот мой сценарий

#region BIG EYE ROAD 
//COLUMN
int prevSum = -1;
for (int col = 0; col < table.GetLength(0); ++col)
{
    GameObject p = Instantiate(big_eye_gameobject) as GameObject;
    p.transform.SetParent(pos_big_eye_road);
    p.transform.localScale = Vector3.one;

   img = (RawImage)p.GetComponent<RawImage>();

   int sum = CountRow(table, col);

   Debug.Log("How many are there : " + CountRow(table, col));
   //Debug.Log("table column :" + col + " has " + sum + " data");
   if (sum == prevSum)
   {
        if (StartingPos == 1)
        {
            BigEyeYIndex = 0;
            BigEyeXIndex = 0;
            StartingPos++;
        }
        else
        {
            BigEyeYIndex += 1;
        }

        img.texture = NewTexture[1];
        p.SetActive(true);
        //Debug.Log(col + " has the same length data as " + (col - 1));
   }
   else
   {
        BigEyeXIndex += 1;
        BigEyeYIndex = 0;
        img.texture = NewTexture[0];
        p.SetActive(true);
   }
        prevSum = sum;

   p.transform.localPosition = new Vector3(BigEyeXIndex * 56, BigEyeYIndex * -45, 0f);  
    }
    #endregion
    yield return null;

}
//generic function
public static int CountRow<T>(T[,] table, int col)
{
    if (table == null || col < 0 || col >= table.GetLength(1)) 
    {
        //handle error
        return -1;
    }

    //this is the same as the block of the outer for loop
    int sum = 0;
    for (int row = 0; row < table.GetLength(1); row++)
    {
        if(table[col,row] != null)
        {
            sum++;
        }
    }
    return sum;
}

. Этот код выполняет только сканирование всей строки и столбца.

И здесь я создал свои собственные данные

enter image description here

2-я плата зависит от выхода первой платы

Начальная точка соответствует ячейке B2 на 1-м изображении выше.если B2 пусто, отправной точкой является C1.

Например, первая запись показывает ячейку A1 на изображении выше.Поскольку ячейка B2 является началом нового столбца, мы проверяем, равны ли два предыдущих столбца по длине.Это означает, что если ячейки B2 и B1 равны длине A2 и A1

, если они есть, я отмечу на 2-й доске красный круг, если отличается по длине, он будет синим.

Следующая запись, которую нужно увидеть, это C1 на изображении выше.Поэтому мне нужно сравнить длину всего столбца ячейки B и ячейки A

. Поэтому они не одинаковы по длине, поэтому будет помечен синим, потому что они различаются по длине

.

Следующая запись, которую нужно увидеть, это C2 на изображении выше.Так что мне нужно сравнить длину ячеек C2 и C1 с B2 и B1, теперь они одинаковы по длине?ДА, поэтому я отмечаю на 2-й доске КРАСНЫЙ

Следующая запись, которую нужно увидеть - это C3 на изображении выше.Итак, мне нужно сравнить длину ячеек C3 и C2 с B3 и B2, теперь они одинаковы по длине?НЕТ, поэтому я отмечаю на 2-й доске СИНИЙ

Следующая запись, которую нужно увидеть, это C4 на изображении выше.Итак, мне нужно сравнить длину ячеек C4 и C3 с B4 и B3, теперь они одинаковы по длине?ДА, поэтому я отмечаю на 2-й доске КРАСНЫЙ.Вы должны быть сбиты с толку, но, хотя это NULL, они одинаковы по длине.

Следующая запись, которую нужно увидеть, - C5 на изображении выше.Поэтому мне нужно сравнить длину ячеек C5 и C4 с B5 и B4, теперь они одинаковы по длине?ДА, поэтому я отмечаю на 2-й доске КРАСНЫЙ.

Следующей записью будет D1 по тем же правилам, что и С1, он будет считать весь столбец ячейки С и ячейки В, если они имеют одинаковую метку длины КРАСНЫЙ, иначе СИНИЙ

Следующая запись - D2 на изображении выше.Так что мне нужно сравнить длину ячеек D2 и D1 с C2 и C1, теперь они одинаковы по длине?ДА, поэтому я отмечаю на 2-й плате КРАСНЫЙ.

И ТАК ВКЛ.

Итак, ожидаемый результат - это

enter image description here

Ожидаемый вывод только из ячейки D. Я не включил оставшуюся ячейку. E

Я знаю, что я почти со своим кодомНо я не могу понять это.Может ли кто-нибудь помочь

Вот мой код на 1-й доске

 string[] strData = { "P  ,P  ,P  ,B  ,T  ,P  ,P B,P  ,P  ,P  ,B  ,B  ,T  ,B  ,B  ,P  ,T  ,P  " };
 string[,] table = new string[104, 6];
 int xIndex = 0;
 int yIndex = 0;
 string OriginalData = "";

  IEnumerator Win_Log()
{

    yield return new WaitForEndOfFrame();

    for (int i = 0; i < strData.Length; i++)
    {
        OriginalData += strData[i];
        OriginalData += ",";
    }
    string[] newNewData = OriginalData.Split(',');
    string result = "";

    string previous = "";
    int counterForTie = 0;
    int counterForRow = 1;
    int justMoveToY = 1;


    int moveRow = 1;
    int moveCol = 1;

    foreach (string newStrData in newNewData)
    {
        //Debug.Log("This is the data : " + newStrData);

        GameObject o = Instantiate(prefab_gameobject) as GameObject;
        o.transform.SetParent(pos_big_road);
        o.transform.localScale = Vector3.one;

        img = (RawImage)o.GetComponent<RawImage>();

        //check the length so that it won't throw an exception
        if (newStrData.Length > 1)
        {
            //get only the first letter of the value P,B,T
            result = newStrData.Substring(0, 1);
        }
        else
        {
            result = "";
        }

        #region BIG ROAD
        if (table.GetLength(0) < xIndex)
        {
            break;
        }

        if (result.Equals(newPrevious) || result.Equals("T") && yIndex < table.GetLength(1))
        {
            if (counterForRow == 1)
            {
                yIndex = 0;
                counterForTie++;
                table[xIndex, yIndex] = result;
                counterForRow++;
            }
            else
            {
                yIndex += 1;
                counterForTie++;
                table[xIndex, yIndex] = result;
            }
        }
        else if (result.Equals(newPrevious) && previous.Equals("T") && yIndex < table.GetLength(1))
        {
            yIndex += 1;
            counterForTie++;
            table[xIndex, yIndex] = result;
        }
        else
        {
            if (justMoveToY == 1 && counterForRow == 1)
            {
                xIndex = 0;
                yIndex = 0;
                table[xIndex, yIndex] = result;
                justMoveToY++;
                counterForRow++;

            }
            else if (justMoveToY == 1)
            {
                xIndex = 0;
                yIndex += 1;
                table[xIndex, yIndex] = result;
                justMoveToY++;
            }
            else
            {
                xIndex += 1;
                yIndex = 0;
                table[xIndex, yIndex] = result;
                counterForTie = 0;
            }
        }

        previous = result;

        if (!result.Equals("T"))
        {
            newPrevious = previous;
        }

        if (counterForTie < 6)
        {
            o.transform.localPosition = new Vector3(xIndex * 56, yIndex * -45, 0f);
        }
        else
        {
            int reminder = counterForTie % 5;
            o.transform.localPosition = new Vector3((xIndex + reminder) * 93, -465, 0f);
        }
...