0

嗨,我创建了一个脚本,将扫描整个ColumnRow问题是我需要先扫描该特定列上的所有数据,然后移动到下一个。这是我的脚本

#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;
}

这段代码的作用是它只扫描整个行和列。

在这里我创建了自己的数据

在此处输入图像描述

第二块板取决于第一块板的输出

起点对应于上面第一张图像上的单元格 B2。如果 B2 为空,则起点为 C1。

例如,第一个条目显示上图中的单元格 A1。由于单元格 B2 是新列的开头,因此我们检查前两列的长度是否相等。这意味着如果单元格 B2 和 B1 等于 A2 和 A1 的长度

如果它们是,我将在第二块板上标记一个红色圆圈,如果长度不同,它将是蓝色的。

下一个要查看的条目是上图中的 C1。所以我需要比较单元格B和单元格A的整列长度

所以它们的长度不一样,所以它会将它标记为蓝色,因为它们的长度不同

下一个要查看的条目是上图中的 C2。所以我需要将单元格 C2 和 C1 的长度与 B2 和 B1 进行比较,现在它们的长度是否相同?是的,所以我在第二块板上标记为红色

下一个要查看的条目是上图中的 C3。所以我需要将单元格 C3 和 C2 的长度与 B3 和 B2 进行比较,现在它们的长度是否相同?不,所以我在第二块板上标记了蓝色

下一个要查看的条目是上图中的 C4。所以我需要将单元格 C4 和 C3 的长度与 B4 和 B3 进行比较,现在它们的长度是否相同?是的,所以我在第二块板上标记为红色。您一定会感到困惑,但即使它是 NULL,它们的长度也是相同的。

下一个要查看的条目是上图中的 C5。所以我需要将单元格 C5 和 C4 的长度与 B5 和 B4 进行比较,现在它们的长度是否相同?是的,所以我在第二块板上标记为红色。

下一个要查看的条目将是 D1 与 C1 相同的规则它将计算单元格 C 和单元格 B 的整个列,如果它们具有相同的长度标记为红色,否则为蓝色

下一个要查看的条目是上图中的 D2。所以我需要将单元格 D2 和 D1 的长度与 C2 和 C1 的长度进行比较,现在它们的长度是否相同?是的,所以我在第二块板上标记为红色。

等等。

所以预期的输出是这样的

在此处输入图像描述

预期输出仅来自单元格 DI,不包括剩余的单元格 E

我知道我的代码快到了。但我无法弄清楚。有人可以帮忙吗

这是我在第一块板上的代码

 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);
        }
4

0 回答 0