Увеличение позиции, если массив строковых данных отличается от C # (Unity) - PullRequest
0 голосов
/ 02 мая 2018

Мне нужна помощь по поводу табло, которое я делаю. Вот табло, которое я хочу достичь:

Enter image description here

У меня на самом деле есть четыре таблицы, и у каждой таблицы есть свое табло, но для этого вопроса мне нужен только стол 1. Вот как я создаю табло такого типа.

Теперь, пока я сделал это:

if (gametable_no == 1)
{
    for (int i = 0; i < tzPlayInfo.Instance.bc_gametable_history_list.Count; i++)
    {
        newString[0] += tzPlayInfo.Instance.bc_gametable_history_list[i].r;
        newString[0] += ",";
    }
    string[] groupedString = newString[0].Split(',');

    foreach (string allchars in groupedString)
    {
        int x = 0;
        int y = 0;

        GameObject o = Instantiate(prefab_big_road[0]) as GameObject;
        o.transform.SetParent(pos_big_road[0]);
        o.transform.localScale = Vector3.one;
        o.transform.localPosition = new Vector3(2.0f, -5.0f, 0f);
        o.transform.localPosition = new Vector3(o.transform.localPosition.x + x,
            o.transform.localPosition.y + y, o.transform.localPosition.z);

        if (allchars.Contains(playerwinnopairboth))
        {
            o.GetComponent<UISprite>().spriteName = "layout_player_bigline-01";
            NGUITools.SetActive(o, true);
        }

        if (allchars.Contains(bankerwinnopairboth))
        {
            o.GetComponent<UISprite>().spriteName = "layout_banker_bigline-01";
            NGUITools.SetActive(o, true);
        }

        if (allchars.Contains(tienopairboth))
        {
            o.GetComponent<UISprite>().spriteName = "layout_tie_bigline-01";
            NGUITools.SetActive(o, true);
        }
    }
}

Этот код будет достигать только так:

Enter image description here

Выходные данные генерируются случайным образом, поэтому, например, у меня есть следующие выходные данные:

Gametable 1 history : P  ,P  ,P  ,B   ,B P,P P,TBP

Мне нужно знать, меняется ли символ , меняется в gametable 1 history data.

Например: Вывод должен быть таким

Enter image description here

Если значение не меняется, например P ,P ,P, то позиция будет увеличиваться только по оси y, а затем, если следующее значение будет отличаться от B ,, оно будет перемещаться по оси x.

Есть ли способ определить, отличается ли символ в вашем массиве строк от другого значения?

EDITED

string[] newString = new string[4];

string[,] table = new string[70, 70];

string previousValue = "placeholder";
int xIndex = -1;
int yIndex = 0;

// First table
if (gametable_no == 1)
{
    for (int i = 0; i < tzPlayInfo.Instance.bc_gametable_history_list.Count; i++)
    {
        newString[0] += tzPlayInfo.Instance.bc_gametable_history_list[i].r;
        newString[0] += ",";
    }

    //string[] groupedString = GroupString(newString[0]);
    string[] groupedString = newString[0].Split(',');
    foreach (var allchars in groupedString)
    {
        GameObject o = Instantiate(prefab_big_road[0]) as GameObject;
        o.transform.SetParent(pos_big_road[0]);
        o.transform.localScale = Vector3.one;

        if (table.GetLength(0) < xIndex)
        {
            break;
        }

        if (allchars.Equals(previousValue) && table.GetLength(1) < yIndex)
        {
            yIndex += 15;
            table[xIndex, yIndex] = allchars;
        }
        else
        {
            xIndex += 15;
            yIndex = 0;
            table[xIndex, yIndex] = allchars;
        }
        previousValue = allchars;

        o.transform.localPosition = new Vector3(xIndex, yIndex, 0f);

        // Match the sprites
        if (previousValue.Contains(playerwinnopairboth))
        {
            o.GetComponent<UISprite>().spriteName = "layout_player_bigline-01";
            NGUITools.SetActive(o, true);
        }

        if (previousValue.Contains(bankerwinnopairboth))
        {
            o.GetComponent<UISprite>().spriteName = "layout_banker_bigline-01";
            NGUITools.SetActive(o, true);
        }

        if (previousValue.Contains(tienopairboth))
        {
            o.GetComponent<UISprite>().spriteName = "layout_tie_bigline-01";
            NGUITools.SetActive(o, true);
        }
    }

Он генерирует только несколько префабов:

Enter image description here

Хотя я уже сгенерировал эти данные:

Enter image description here

В моем интерфейсе отображается только два:

Enter image description here

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Спасибо Безнравственность за то, что он показал мне свой ответ , и он был на самом деле правильным, но без условия:

if (table.GetLength(0) < xIndex)
            {
                break;
            }

            if (previousValue.Equals(newPreviousValue) && yIndex < table.GetLength(1))
            {
                yIndex += 1;
                table[xIndex, yIndex] = previousValue;
            }
            else
            {
                xIndex += 1;
                yIndex = 0;
                table[xIndex, yIndex] = previousValue;
            }
            newPreviousValue = previousValue;

поэтому вместо table.GetLength(1) < yIndex должно быть yIndex < table.GetLength(1).

0 голосов
/ 02 мая 2018

Я бы предложил использовать многомерный массив в качестве таблицы. Может быть как то так?

string[,] table = new string[30, 6];

string previousValue = "placeholder";
int xIndex = -1;
int yIndex = 0;

foreach (var value in groupedString)
{
    if (table.GetLength(0) < xIndex)
    {
         break;
    }

    if (value.Equals(previousValue) && yIndex < table.GetLength(1))
    {
        yIndex += 1;
        table[xIndex, yIndex] = value;
    }
    else
    {
        xIndex += 1;
        yIndex = 0;
        table[xIndex, yIndex] = value;
    }
    previousValue = value;
}

Теперь у вас должна быть таблица, содержащая все значения, которые вы затем сможете отобразить в своем интерфейсе и соответствующим образом сопоставить с правильным спрайтом.

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