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

mov ax 10h:

Редактор карт
Я считаю очень удобным создавать и хранить уровни в файлах, а не в слоях. Тут есть куча преимуществ, основным из которых является, то что любой может создать свой уровень и передать его другу в виде подключаемого файла. Давайте создадим редактор уровней для "танчиков". Ранее мы создали слой "Create" переходим в него. Нам потребуется 5 спрайтов (кнопки выбора кисти), 4 спрайта-кисти, спрайт canvas,спрайт box и объект для работы с клавиатуройИмышью.
спрайт canvas нужен для того чтобы пользователь видел чем он сейчас будет рисовать, а спрайт box нужен для создания клеток, в которых мы и будем рисовать. Это лучше воспринимается наглядно.
Для того чтобы создать двумерный массив, сделаем цикл в цикле, как в школе. размер всех спрайтов 48.
запустим превью слоя и увидим следующие:
Красота! Чтобы понять чем рисовать нужно завести еще одну глобальную переменную, я назвал box(нач. знач=1)
Теперь создаем Event нажатие мышкой на наши спрайты-кисти:
По нажатию на каждую кисть значение переменной меняется от 1 до 5. На картинке также можно видеть, что меняется координата Y, объекта canvas. Тем самым мы показываем какая кисть активна.
Ну, чтож приступим к рисованию? для этого необходимо добавить несколько Eventov. Если курсор мыши находится над объектом (клеточкой) box и если мы зажали ЛКМ, то мы создаем спрайт-кисть. В зависимости от того какое значение у переменной box, мы рисуем той или иной кистью, координаты кисти берем такие же как и у спрайта box:
Примечание: Пришлось добавить еще одну кисть, для удаления нарисованного.
В действии все выглядит так:
С визуальным оформлением разобрались, теперь давайте сохраним наш уровень в файл, с последующим его чтением.Для этого наи потребуется:
1)спрайт кнопка "Сохранить"
2)спрайт который будет "бежать" по всем клеткам и смотреть что там нарисованно(я выбрал маленький спрайт 16 на 16, а вообще цвет и размер не имеет никакого значения).
3)объект Array, нужен для того чтобы мы запхали уровень сначала в него, а потом в файл. В файле уровень будет выглядеть как двумерная матрица 13 на 13 состоящая из цифр от 1 до 5. Когда мы будет открывать карту мы будем парсить этот массив и делать действия обратные тем, когда рисовали. В настройках массива необходимо указать размер 13*13*1.Хватит болтавни, давайте сделам это!
Добавим спрайт "Save" на какое-нибудь красивое место) и пишим "Event" по нажатию на него.
В событии этого эвента создаем двойной цикл в цикле пишем перемещение спрайта "бегунка". Все это нужно лишь для того чтобы определить какой спрайт стоит в клетки. Если вы знаете другой способ, воспользуйтесь им. Итак должно получится следующее:
Итак, если наш "бегунок" пробигая по всем клеткам столкнулся со спрайтом стены, то заносим в массив, значение 1. Если с деревьями, то значение 2 и тд. индекс массива берем из индексов текущего элемента массива. Далее для пробы сохраняем массив в файл.
Плюс метода в том, что в массив можно сохранять все что угодно, даже пароли к картам. При этом пользователь не смощет прочитать его через блокнот.
И напоследок давайте сделаем диалог сохранения файлов. Добавим в проект объект CommonDialog и допишим вот такие события:
ЗЫ в этом уроке мы научились создавать и сохранять карты в файл, следующий урок о том, как загрузить карту, игровой движок и может что-нибудь еще.

tank.cap