Массив - это упорядоченный
набор данных. Каждый из элементов массива имеет уникальный номер (индекс),
который служит для однозначной идентификации элемента внутри массива. Таким
образом в одном массиве не может быть элементов с одинаковыми индексами.
Предположим у нас есть необходимость хранить названия уровней нашей игры. Мы,
конечно можем создать переменные в количестве соответствующем числу уровней и им
присваивать названия уровней. Но гораздо проще создать один массив и его
элементам назначить имена этих уровней.
Массивы в языке BlitzBasic
создаются с использованием ключевого выражения Dim,
свойственного всем языкам на основе стандартного бейсика. Например, чтоб
создать массив из 10 элементов, напишем следующую строку:
Эта строка кода нашей программы создает
одномерный массив с названием 'arr' из 11
элементов начиная с 0 и заканчивая 10. Массивы в
BlitzBasic могут быть любого базового типа либо
пользовательского типа. Тип массива задается, как Вы уже наверно догадались при
помощи специальных тэгов (tag)
Выше приведенная строка создает массив из 11
элементов для хранения чисел с плавающей точкой. Если тэг опущен, массив
создается целочисленным. Размер массива может задаваться и изменяться в любом
месте программы, при этом его элементы будут стираться. Размеры массивов могут
изменяться и в пределах пользовательских функций, но создание массивов нужно
производить в теле основной программы. Пример:
Graphics 640, 480
Dim distances#(10)
print
distances(1)
test( 10.5 )
print
distances(1)
WaitKey()
function
test( v# )
distances(1) = v
end function |
В данном примере в
начале программы создается массив distances и
функция test, которая, не мудрствуя лукаво присваивает
первому его элементу переданное ей значение в качестве аргумента. Мы выводим на
экран командой print distances(1)
значение этого первого элемента массива до вызова
функции и после него. Результаты говорят сами за себя. Этот пример вы можете
перенести в среду BlitzBasic и выполнить.
Еще один пример создания и использования массива, на этот раз состоящего из
строковых элементов:
Graphics 640, 480
Dim Levels_Names$(3)
Levels_Names(0) = "Main Entrance"
Levels_Names(1) = "Enemy Base"
Levels_Names(2) =
"Underground Factory"
Levels_Names(3) =
"Devil's Lair"
print
Levels_Names(0)
print
Levels_Names(1)
print
Levels_Names(2)
print
Levels_Names(3)
WaitKey()
|
В примере создается строковый (
заметили тэг $ ?
) массив из 4 элементов от 0...3, и его элементам присваиваются названия
уровней в нашей игре, далее они последовательно выводятся на экран.
В наших дальнейших уроках мы научимся хранить в массивах не только строки и
числа, но и картинки, музыку и звуковые файлы.
Список (или пользовательский тип данных) - служит
для создания структур данных разного типа. К примеру у нас есть объект - монстр.
Чтоб описать его состояние мало одной переменной. Нужно много переменных
хранящих к примеру его имя, текущее здоровье, его манеру поведения, координаты
на карте, скорость перемещения и т.д. Надо также заметить что в играх обитают не
один а сотни кровожадных монстров, каждый со своими характеристиками и
параметрами. Посему размножать в программе переменные для учета этих
характеристик просто не имеет смысла. Вот как, к примеру можно учесть нужные
параметры монстра в пределах одной структуры (списка
/ пользовательского типа - называйте на Ваше усмотрение).
Type
monster
Field
x#,y#,z#
Field
MonsterName$
Field
Health%
Field Status%
End
Type |
Организация списка начинается с ключевого слова
Type, все поля списка предваряются ключевым
словом Field и завершается список
зарезервированной командой End Type.
В нашей структуре, мы определили такие поля как: имя монстра, его
координаты, здоровье и статус (это может быть активное нападение, преследование,
патрулирование, статичное положение и т.д.). В игре для более точной
идентификации монстра понадобится больше полей определяющих его состояние, но
пока, думаю, хватит и этих.
Напишем маленькую программку, которая инициализирует нашу структуру какими-то
значениями. Мы не увидим монстра на экране, так как для этого понадобится его
модель, но мы сможем отследить его параметры.
Graphics 640, 480
Type monster
Field
x#,y#,z#
Field
MonsterName$
Field
Health%
Field Status%
End
Type
monster1.monster = New
monster
monster1\x = 10
monster1\y = 10
monster1\z = 1
monster1\MonsterName = "Evil Dragon"
monster1\Health = 100
monster1\Status = 1
;
Для примера меняем
координату Х
Monster1\x = Monster1\x +10
Print monster1\x
Print
monster1\y
Print
monster1\z
Print monster1\MonsterName
Print
monster1\Health
Print
monster1\Status
WaitKey() |
В выше приведенной программе уже имеется знакомая
Вам структура (список) содержащая поля описывающие нашего монстра. Далее мы
создаем экземпляр структуры в памяти с помощью команды New.
С помощью этой команды можно создать еще парочку монстров. Выглядеть это
будет так:
monster1.monster
=
New monster
monster2.monster
=
New monster
monster3.monster
=
New monster |
Гораздо более просто и наглядно не плодить
переменные с разными именами Monster1, Monster2, Monster3
и т.д. а создать массив монстров. Безусловно вначале нам нужно знать
сколько их будет в нашей игре. Допустим их 4. Смотрим
пример:
Graphics 640, 480
Type monster
Field
x#,y#,z#
Field
MonsterName$
Field
Health%
Field Status%
End
Type
Dim
AllMonsters.monster(3)
For
i=0 to 3
AllMonsters( i ) =
New
monster
AllMonsters(
i )\MonsterName = "EvilMonster"+Str(
i )
Next
For i=0 to 3
print
AllMonsters(i)\MonsterName
Next
WaitKey() |
Строка
Dim AllMonsters.monster(3) инициализирует массив
структур (списков) из трех элементов. Далее цикл создает три экземпляра объекта
monster и присваивает его элементам ранее
инициализированного массива. В этом же цикле мы
присваиваем полю MonsterName имя, которое
создается постоянной частью и прибавляемым индексом i,
меняющимся от 0 до 3. Это и есть
базовый подход к созданию большого числа объектов с
различными свойствами.
|