Каталог статей

Главная » Статьи » Создание игр

Массивы и списки в Blitz3d
     Массив - это упорядоченный набор данных. Каждый из элементов массива имеет уникальный номер (индекс), который служит для однозначной идентификации элемента внутри массива. Таким образом в одном массиве не может быть элементов с одинаковыми индексами.
Предположим у нас есть необходимость хранить названия уровней нашей игры. Мы, конечно можем создать переменные в количестве соответствующем числу уровней и им присваивать названия уровней. Но гораздо проще создать один массив и его элементам назначить имена этих уровней.
     Массивы в языке BlitzBasic создаются с использованием ключевого выражения Dim, свойственного всем языкам на основе стандартного бейсика. Например, чтоб создать массив из 10 элементов, напишем следующую строку:

Dim arr(10)

Эта строка кода нашей программы создает одномерный массив с названием 'arr' из 11 элементов начиная с 0 и заканчивая 10. Массивы в BlitzBasic могут быть любого базового типа либо пользовательского типа. Тип массива задается, как Вы уже наверно догадались при помощи специальных тэгов (tag)

Dim distances#(10)

Выше приведенная строка создает массив из 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
monster
1\MonsterName = "Evil Dragon"
monster1\Health = 100
monster1\Status = 1

;
Для примера меняем координату Х
Monster1\x = Monster1\x +10

Print monster1\x
Print monster1\y
Print monster1\z
Print monster
1\MonsterName
Print monster1\Health
Print monster1\Status

WaitKey()

В выше приведенной программе уже имеется знакомая Вам структура (список) содержащая поля описывающие нашего монстра. Далее мы создаем экземпляр структуры в памяти с помощью команды New. С помощью этой команды можно создать еще парочку монстров. Выглядеть это будет так:

monster1.monster = New  monster
monster
2.monster = New  monster
monster
3.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. Это и есть базовый подход к созданию большого числа объектов с различными свойствами. 

Категория: Создание игр | Добавил: ParisHilton (05.01.2011)
Просмотров: 2004 | Рейтинг: 5.0/2
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Категории раздела
Создание игр [8]
Работа с Сетью [1]
Работа с Сетью в Blitz3D Протоколы TCP, FTP, интернет-сёрфинг и пр.
Физические движки [3]
работа с физикой в Blitz3d
Форма входа

Наш опрос
Сколько проектов Вы начинали (в скольких участвовали)?
Всего ответов: 141
Поиск
Статистика


Онлайн всего: 1
Гостей: 1
Пользователей: 0
Друзья сайта
  • Все об умных часах и фитнес-браслетах
  • Все о поездах и железных дорогах!
  • Aндроид-клуб
  • Автоистория СССР
  • Блог о wordpress
  • Ноты для фортепиано

  • WIFI DIRECT

    все для wordpress



    умные часы Swatch
    умные очки Sony
    умные часы Fitbit Surge