Как сделать старую добрую Battle Tank, часть 3 (загрузка) part1

mov ax 10h:
Всем привет, давайте продолжем изучение замечательного конструктора игр. Сегодня я расскажу о загрузке карт, которые мы уже научились сохранять в файл.

Загрузка карт из файлов
Немного отступления: т.к. я не делал игру до этого, а делаю её вместе с вами пока пишу статью, то возможно будут встречаться некоторые дороботки и ошибки.
Так вот, я добавил 4 спрайта-кисти:
так как это уже обсуждалось я не буду останавливаться на этом. + я добавил спрайт "Back", для возврата в главное меню, на случай если пользователь не захочет рисовать.
А теперь по теме. Т.к. у нас появилась возможность загружать карты, то придется добавить в меню "Load map"
Теперь немного теории. В нашей игре будет возможность простой игры,т.е загрузка карт попорядку из папки Levels, а также загрузки карты пользователя. Чтобы не создавать 2 почти одинаковых слоя, для каждого действия, придется немного поморочится. Я к чему виду, нужно создать игровой слой, в который мы будем передовать путь к загружаемой карте, будь она стандартной или пользовательской. Итак нам понадобиться еще 2 слоя:
1 слой(preGame)-черный фон с надписью Stage 1, ну мы все помним это из игры, в этом слое будет возможность также выбрать уровень. Уровень загружается по нажатию клавиши Enter.
2 слой(playGame)-игровой, где будет строиться карта из файла.Запутано? вот немного картинок:
Идем в слой меню и добавляем следующие события:
Здесь:Если нажимаем на Play, то просто переходим на слой preGame, где будет написано Stage 1.
Если нажимаем на Load map, то открывается окно диалога выбора файла. На картинке видно, что можно поставить фильтр файлов, я поставил "btl"-это придуманое мной расширение Batle Tank level. Можно задать другое на ваш вкус.
Также можно заметить, что я создал 2 новых глобальных переменных:
1)Level_name - как я говорил раньше, в ней будет храниться путь к карте.
2)useload - нужна для того, чтобы узнать какую карту строить(пока будет непонятно, но я попробую объяснить позже) стандартную или пользовательскую. значение 0 - стандартная 1- пользовательская. По умолчанию 0
Теперь идет в слой preGame, как я говорил он состоит из спрайта "Stage" и объекта "Text"
Заходим в Event ЩИТ
tank.rar

Итак, избавляемся от второго подводного камня. Для этого нужно просто не дать пользователю рисовать в тех местах, где это не требуется. Для этого при построении сетки в слое Creatmap, не нужно рисовать квадратики сетки. Но так как у нас все завязано в цикле, то мы сделаем по-хитрому. Создаем еще один спрайт 48*48, назовем его тоже по-хитрому mask_kill. После того как отработает алгоритм создания сетки, мы поместим этот спрайт на место первой клетки, где будет появляться враг, проверим на столкновение спрайт mask_kill и box, а они естественно столкнутся, и удалим спрайт box, далее мы помещаем наш спрайт маску в другую клетку и повторяем действие. На месте где должен стоять штаб, мы увеличиваем размер маски и также удаляем ненужные box. Т.к. у нас одно и то же действие повторятся несколько раз, то я вынес его в отдельную функцию, которую вызываю каждый раз, когда она понадобиться:
Теперь редактор выглядит так:
0о забыл вырезать клетку под танк игрока.(изменение внесу, а исправлять картинку не буду)
Возвращаемся в слой playGame, а заодно и к нашему первому подводному камню. Для отрисовки спрайта камня, необходимо сложить его из нескольких кусочков. Так и сделаем, я создал 2 спрайта Wall1 и wall2, из которых я и буду собирать стены. Также создадим спрайт ядра штаба, я точно не понял кто это, вроде орел. Все это ставим на свои места, должно получится, что-то типа этого:
Теперь научимся строить стены. И попутно закрепим навыки работы с функциями. В этом примере можно обойтись без них, но мне показалось, будет не лишним воспользоваться функцией. Все будет аккуратней и красивее. Кидаем объект Function на слой playGame, смотрим если у нас в массиве встретилась «1», что говорит нам о том, что это блок «стена», то вызываем функцию, с двумя параметрами, куда мы положим координаты «x,y». В теле функции мы создаем 4 объекта, с подкорректированными координатами, которые мы получили как параметры функции.
По аналогии добавляем функции создания, половины стен, которые я ранее добавил в редактор.
Я добавил стрельбу на Пробел для пробы, можно загрузить levels/1.btl или создать свое творение и поездить посмотреть как все это работает
tank.rar