Обычно для текстовых игр многомерные массивы не нужны, однако авторы, пишущие на QSP, порой внедряют в свои проекты элементы RPG, стратегий, и игр других жанров. Вот тогда-то многомерные массивы бывают очень полезны.
Если вы не знаете, зачем в вашей игре может понадобиться многомерный массив, скорее всего он вам не нужен. Пропустите данную тему — вернётесь к ней, когда возникнет необходимость.
Ну, а если вы всё-таки подозреваете, что многомерный массив вам может понадобиться, то вот несколько примеров использования:
$map[1,2]='лес' & ! в строке 1, столбце 2 находится лес $map[1,3]='лес' & ! в строке 1, столбце 3 находится лес $map[2,2]='лес' & ! в строке 2, столбце 2 находится лес $map[4,0]='река' & ! в строке 4, столбце 0 находится река
$cell['Полка 1', 'Название'] = 'Апельсин' & cell['Полка 1', 'Цена'] = 12 & $cell['Полка 1', 'Вес'] = 1 $cell['Полка 2', 'Название'] = 'Отвёртка' & cell['Полка 2', 'Цена'] = 79 & $cell['Полка 2', 'Вес'] = 2 $cell['Полка 3', 'Название'] = 'Камень' & cell['Полка 3', 'Цена'] = 1 & $cell['Полка 3', 'Вес'] = 153
В QSP есть возможность создавать многомерные массивы, используя для этого специальные индексы:
$map[1,2]='лес' $map[1,3]='лес' $map[2,2]='лес' $map[4,0]='река'
В данном примере в квадратных скобках вместо номера ячейки мы указываем числа, перечисляемые через запятую. Таким образом мы создаём ячейки двумерного массива.
Числа в квадратных скобках — это кортеж.
Используя для индексации ячеек кортежи, мы можем создавать трёхмерные, четырёхмерные, и вообще сколькиугодно-мерные массивы:
$space[0,-2,9] = 'космический корабль' value_time[12,33,1,366] = 137 макрокосмос_миллиардов_микрокосм[12,34,12,98,76,30,11,19,137,90] = 991112
Для многомерных индексов можно использовать не только числовые значения, но и строковые:
данные['таблица_данных',0,1]=73 яблоки['Паша','левый карман']=91 яблоки['Миша','правый карман']=10 $map[12,14,'слой_подземелья']="стена"
Есть небольшая хитрость в том, как назначаются многомерные индексы ячейкам массивов. Когда вы инициализируете (создаёте; объявляете) новую ячейку массива с многомерным индексом, происходит следующее:
7.Поэтому, если вы создаёте ячейку с многомерным индексом, вы можете получать из неё значения в том числе и по числовому индексу:
яблоки['у Паши','левый карман']=37 яблоки['у Паши','правый карман']=5 яблоки['у Лёши','левый карман']=11 яблоки['у Лёши','правый карман']=19 *pl яблоки[0] & ! выведет на экран число 37 *pl яблоки[1] & ! выведет на экран число 5 *pl яблоки[2] & ! выведет на экран число 11 *pl яблоки[3] & ! выведет на экран число 19
Настоятельно рекомендуется использовать для индексирования или только числовые индексы, или только многомерные индексы.
Поскольку многомерные индексы - это кортежи: - можно использовать переменные типа кортеж для подстановок в индексах таких массивов:
%coords = [120, 450, -37] $map[%coords] = 'Alien'
$array[1, 2, 137] ! эквивалентно $array[[1, 2, 137]]
Заполняем карту 10x10 случайными объектами:
local $tile
$tile[] = 'река'
$tile[] = 'горы'
$tile[] = 'лес'
$tile[] = 'дорога'
! нумерация строк, т.е. координата Y
loop local y while y < 10 step y+=1:
! нумерация столбцов, т.е. координата X
loop local x while x < 10 step x+=1:
$map[y, x] = $tile[rand(0, 3, 3)]
end
end