Содержание

Назад: Массивы

Многомерные массивы

Для чего нужны многомерные массивы

Обычно для текстовых игр многомерные массивы не нужны, однако авторы, пишущие на QSP, порой внедряют в свои проекты элементы RPG, стратегий, и игр других жанров. Вот тогда-то многомерные массивы бывают очень полезны.

Если вы не знаете, зачем в вашей игре может понадобиться многомерный массив, скорее всего он вам не нужен. Пропустите данную тему — вернётесь к ней, когда возникнет необходимость.

Ну, а если вы всё-таки подозреваете, что многомерный массив вам может понадобиться, то вот несколько примеров использования:

Как делать многомерные массивы

В 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,'слой_подземелья']="стена"

Есть небольшая хитрость в том, как назначаются многомерные индексы ячейкам массивов. Когда вы инициализируете (создаёте; объявляете) новую ячейку массива с многомерным индексом, происходит следующее:

Поэтому, если вы создаёте ячейку с многомерным индексом, вы можете получать из неё значения в том числе и по числовому индексу:

яблоки['у Паши','левый карман']=37
яблоки['у Паши','правый карман']=5
яблоки['у Лёши','левый карман']=11
яблоки['у Лёши','правый карман']=19
*pl яблоки[0] & ! выведет на экран число 37
*pl яблоки[1] & ! выведет на экран число 5
*pl яблоки[2] & ! выведет на экран число 11
*pl яблоки[3] & ! выведет на экран число 19

Настоятельно рекомендуется использовать для индексирования или только числовые индексы, или только многомерные индексы.

Поскольку многомерные индексы - это кортежи: - можно использовать переменные типа кортеж для подстановок в индексах таких массивов:

%coords = [120, 450, -37]
$map[%coords] = 'Alien'

Примеры использования

Заполняем карту 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

Назад: Массивы