Мне нужна помощь с табло, которое я делаю. Вот табло, которого я хочу достичь:
На самом деле у меня есть четыре таблицы, и каждая таблица имеет свое собственное табло, но для этого вопроса мне нужна только таблица 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);
}
}
}
Этот код будет работать только так:
Вывод генерируется случайным образом, поэтому, например, у меня есть следующие выходные данные:
Gametable 1 history : P ,P ,P ,B ,B P,P P,TBP
Мне нужно знать, является ли символ изменение в gametable 1 history data
.
Например: Результат должен быть таким
Если значение не меняется, как P ,P ,P
, то позиция будет увеличиваться только по оси y, а затем, если следующее значение отличается от B ,
, то оно переместится к оси x.
Есть ли способ определить, отличается ли символ в вашем массиве строки от другого значения?
ИЗМЕНИТЬ
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);
}
}
Он генерирует только несколько сборных:
Хотя я уже сформировал эти данные:
В моем интерфейсе отображается только два:
Я бы предложил использовать в качестве таблицы многомерный массив. Может как то так?
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;
}
Теперь у вас должна быть таблица, содержащая все значения, которые вы затем можете отобразить в своем пользовательском интерфейсе и соответственно сопоставить правильный спрайт.
а string previousValue = "placeholder"
?
Строка [,] - это многомерный массив. Если вы визуализируете это, это будет похоже на загруженное вами изображение. Если вы наберете table [0,0], вы получите доступ к верхней левой ячейке. таблица [1,0] приведенная ниже. table [0,1] 2-я строка, первая ячейка и так далее. Числа в инициализации массива (первая строка) должны соответствовать размерам вашей таблицы. В моем примере это 6 глубин и 30 длин.
"placeholder" - это заполнитель, который перезаписывается предыдущим значением на первой итерации foreach. Его первое значение должно быть любым, если оно не является значением, содержащимся в вашей groupedString.
Я отредактировал свой вопрос, поэтому мой код должен быть таким.
Я отредактировал свой код, чтобы добавить проверки на длину массива, которые предотвращают ошибки индекса за пределами диапазона. Сообщите мне, работает ли код для вас!
table.GetLength(2)
это не может быть преобразовано из int в bool
Ой. моя вина. Должно быть исправлено сейчас
Почему он не появляется, сэр? Вот результат вашего кода imgur.com/a/26tm8lo. 01.big_road - это gametable 1 history
Я бы рекомендовал создавать экземпляры объектов в отдельном методе в зависимости от их положения в массиве. Мне кажется, что теперь вы создаете их экземпляры поверх друг друга. Я сейчас на работе и не могу написать за вас ваш код. Я просто подтолкнул вас в правильном направлении.
хорошо, сэр. Спасибо, я продвигаю ваш код еще раз. Спасибо. Надеюсь, я смогу это сделать
Привет сэр . Код, который вы указали, имеет только это значение. И в нем есть ошибка array is out of range
. Пожалуйста, посмотрите мою правку
Вы должны только увеличить индекс X и Y на 1 в позициях, которые я установил в своем коде. Не меняйте это. Если вы хотите сгенерировать новый вектор, используя координаты X и Y, затем умножьте их на Vector3 следующим образом: o.transform.localPosition = new Vector3 (xIndex * 15, yIndex * 15,0f);
да уже сделал это, сэр. Но есть проблема, сэр, после первой итерации он создает экземпляр всего значения, которое мне нужно, затем после 2-й итерации, сэр, теперь он удваивает все мои префабы. Что я имею в виду под второй итерацией, сэр, так это то, что каждые 10-15 секунд может быть значение данных P, P, P, B
. Добавляет букву, например, через 15 секунд она добавит букву P
, поэтому теперь значение данных - P,P,P,B,P
.
Спасибо Безнравственность за то, что показал мне его ответ, это действительно правильный вариант, но отсутствует условие:
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)
.
Могу я сначала спросить, что это, сэр, извините,
string[,] table = new string[6, 30]