Всем привет, в этом уроке я расскажу как, имея подобный массив с характеристиками персонажей, получать значения, и при этом:
- Не запоминать координаты
- Не соблюдать имеющуюся последовательность при добавлении новых столбцов, строк.
Предупреждение: вероятно, настоящий программист добился бы результата проще и эффективнее. Автор урока — обычный уральский UX-дизайнер.
Урок рассчитан на продвинутых пользователей, знакомых с уроком «Массивы для начинающих».
Итак, в проекте существует массив с данными, из которого вы устали получать значения указывая координаты. Теперь для получения значений, вместо координат мы будем использовать названия столбцов и строк.
На ум приходит нечто подобное: Array.At(Хомяк-ниндзя, Ловкость)
Просто так взять и получить ловкость хомяка-ниндзя у нас не получится. Нам нужно найти X ячейки в которой значение «Хомяк-ниндзя» и Y ячейки в которой «Ловкость». Вернее, нам надо, чтобы программа сама это определяла.
Найти Х столбца, зная только его название, нам поможет выражение IndexOf("Хомяк-ниндзя"). Чтобы выражение сработало, названия персонажей должны быть в самой первой строке массива.
Мы уже имеем: Array.At(IndexOf("Хомяк-ниндзя"), Ловкость).
Попробуйте вставить вместо слова «Ловкость» числовую Y координату, например 2. Напоминаю, в массиве строки/столбцы нумеруются с нуля. Попробуйте вывести значение в текстовый объект.
Если видите ожидаемое значение, идём дальше, нет — ищите ошибку.
Пример ниже:
Найти Y ячейки со словом «Ловкость» нам поможет связка For each XY element с подсобытием Current Value="Ловкость"
Условие For each XY element перебирает все ячейки (в первом Z-уровне).
Условие Current Value проверяет перебираемые ячейки на содержимое. В тот момент, когда программа «наткнётся» на «Ловкость» у нас появляется возможность получить Y этой ячейки с помощью выражения Cur.Y
Всё, что нам нужно:
Теперь в текстовом объекте вы получите значение ловкости хомяка-ниндзя.
В принципе это всё.
Пример использования
В массиве я храню характеристики для противников, и переходя на новую сцену я сталкиваюсь с одним из них. С каким — известно заранее и записывается в переменную. Её я использую в выражениях.
Для наглядности я создал одноимённые глобальные переменные для характеристик, в них будут заданы значения из массива.
Мы не просто так создавали подсобытие для Current Value, в каждом таком подсобытии происходит проверка на содержимое ячейки. И присвоение переменным значений из массива.
Если я добавлю новую характеристику, достаточно будет скопировать подсобытие и изменить слово, на которое будет ориентироваться алгоритм при переборе.
Этот алгоритм можно взять за основу, чтобы запрограммировать присвоение характеристик всем персонажам, а не только одному как в примере.
Спасибо за внимание.