嗨,我创建了一个脚本,将扫描整个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;
}
这段代码的作用是它只扫描整个行和列。
在这里我创建了自己的数据
第二块板取决于第一块板的输出
起点对应于上面第一张图像上的单元格 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);
}