Реклама:

Но есть другой способ хранить информацию в одном месте. Способ этот идеально подходит для структур и переменных одного типа. Это динамические массивы. С обычными массивами вы уже знакомы. Динамические массивы — то же самое по сути, но вот число элементов в них может быть любым. Оно также может меняться во время работы программы. Объявляется динамический массив не просто, а очень просто:

Var

A:array of integer;

Вот так мы объявили динамический массив А из целых чисел. Изначально его длина равна нулю. Чтобы добавлять в него элементы, вам для начала нужно расширить его до необходимых размеров. Вот как это делается:

SetLength<A, 10) ;

Так мы выделили память под 10 элементов. Работайте с ячейками этого массива точно так же, как и с ячейками обычного, например:

А[1]:=5;

Не забудьте только, что у динамических массивов индекс первого элемента равен нулю, а последний — на единицу меньше длины. Кстати, о длине. Получить ее можно с помощью команды Length. Например, так вы сможете заполнить весь массив одинаковым значением.

For х:=0 to Length(A)-l do А[х]:=5;

В отличие от списка, в динамическом массиве хранятся не ссылки на значения, а сами значения. И они никак не связаны с тем местом, откуда вы их получили, например, после выполнения строчки

А[0]:=В;

Переменная в и первая ячейка массива А будут иметь одинаковое значение, но жить будут совершенно независимо.

Вы можете также объявить многомерный динамический массив, например так.

A:array of array of array of integer;

Это трехмерный массив целых чисел. Так его можно проини-циализировать.

SetLength(А.10,20,30);

Ну а так получить доступ к конкретной ячейке.

А[1.2,3]:=5;

В целом динамические массивы — крайне удобный контейнер для хранения однотипной информации.

Программирование игры на основе движка GLScene: модуль поиска путей

Один из важнейших кирпичиков любого игрового движка — модуль поиска путей. Он нужен в играх самых разнообразных жанров. В action pathfinding (именно этот устоявшийся термин используется в документации к разного рода движкам) он поможет монстру максимально быстро найти героя или убежать от него, не запутавшись в четырех стенах. В стратегиях отряд лучников, который неумолимая длань игрока послала на противоположный конец карты атаковать вражескую крепость, в конце концов дойдет до нее, а не будет ходить по кругу у особо хитрого сочетания елочек и сосенок. В RPG партия приключенцев найдет священный Грааль, а не замрет у первой же стены. И даже в Lines храбрый шарик доберется до линии своих собратьев по цвету или же скажет, что это невозможно. Словом, модуль поиска путей нужен везде. А вот как его реализовать? Этим мы сейчас и займемся.

Рождение матрицы

Сначала слегка вас напугаю. Задачи, подобные этой, рассматриваются в дискретной математике и описываются теорией графов. Сама теория сопровождается водопадом заковыристых математических значков и такими страшными словосочетаниями, как "отношение контрпозиции", "эйлеров цикл" и даже "матрица весов". Но не придумали еще такой математической теории, которую нельзя было бы перевести на нормальный человеческий язык.


⇐ Предыдущая страница| |Следующая страница ⇒