воскресенье, 27 мая 2012 г.

Создание редактора карт. Часть 2 - Основной цикл и инициализация карты.

После объявления глобальных переменных и констант перейдём к началу создания основного цикла.

Основной цикл - цикл в программе, который будет выполняться непрерывно, вплоть до завершения программы. Для создания бесконечного цикла используем конструкцию BlitzMax:

repeat
...
forever


Перед началом основного цикла вызовем функцию initmap(), которая обнулит наш массив для карты.

Описание функции initmap():

Function initmap()
local x%
local y%
for x = 0 to g_screen_width step 40
for y = 0 to g_screen_heigth step 40
map[x/40,y/40] = 0
next
next
end function

Конструкция Function имя_функции() ... end function всем вам давно известна. Local объявляет локальную переменную, которая будет видима лишь в функции, в которой она объявлена. Больше мы их нигде не будем использовать, поэтому не будем увеличивать список глобальных переменных.
For ... next - цикл. Step - шаг цикла, мы указали его равным 40 (размер тайла). Думаю, строчка map[x/40,y/40]=0 вам понятна, здесь мы обнуляем массив карты.

Добавим в основной цикл остальные функции, а также кнопку выхода (неудобно все время закрывать программу через диспетчер задач, ведь так?). Список основных функций приведён в первой статье данной линейки (вступление).

repeat
drawlines()
controls()
drawtiles()
if keydown(key_escape) or appterminate() end
flip
cls
forever

Не буду повторять, зачем нам все эти функции (так как, надеюсь, вы читали предыдущие части внимательно), поэтому объясню остальные команды. Все ведь знают оператор if
if (выражение) оператор
Если выражение возвращает значение Истинно (всё, кроме 0) выполняется оператор. В данном случае выражение - keydown(key_escape) or appterminate(), а оператор - end.

keydown(key_escape) - проверка на нажатие клавиши esc.
appterminate() возвращает истину, когда пользователь закрывает программу, нажимая на крестик в верхнем правом углу окна (в оконном режиме).
end - моментально завершает программу.

Если вы пользуетесь не blitzmax'ом, то используйте аналоги данных команд в вашем движке. Хотя я уже повторяюсь.

Рассмотрим команды flip и cls. В blitzmax'е они служат для вывода изображения на экран (на самом деле для другого, но я не буду вникать в подробности). Многим движкам такие команды не нужны.

Замечу, что blitzmax позволяет вызывать функцию до её объявления в исходном коде. Компилятор позволяет.

Полный исходный код нашей программы на данный момент:

Const g_screen_width = 800
Const g_screen_heigth = 600
Graphics g_screen_width, g_screen_heigth
Global current_tile = 0
Global font = LoadImageFont("arial.ttf",32)
SetImageFont font
Global map[g_screen_width/40+1,g_screen_heigth/40+1]

initmap()
Repeat
drawlines()
controls()
drawtiles()
If KeyDown(key_escape) Or AppTerminate() End
Flip
Cls
Forever

Function initmap()
Local x%
Local y%
For x = 0 To g_screen_width Step 40
For y = 0 To g_screen_heigth Step 40
map[x/40,y/40]=0
Next
Next
End Function

***


Комментариев нет:

Отправить комментарий