Blitz3d - Условия, бесконечные циклы, опрос клавиатуры

В дальнейшем в спецкурсе условия понадобятся только для организации опроса клавиатуры, т. е. выполнения каких – либо действий при нажатии определенных клавиш. Но, будет нелишне дать определение условий и разъяснить принцип действия структуры условия.

Условие IF-THEN-ELSE-END IF

Условия - это выражения, которые бывают ЛОЖНЫМИ или ИСТИННЫМИ.
В условиях можно использовать следующие знаки: равно (=), больше (>), меньше (<), больше или равно (>=), меньше или равно (<=), не равно (<>)
Условие A = B ИСТИННО, когда A равно B и ЛОЖНО в других случаях
Условие A > B ИСТИННО, когда A больше B и ЛОЖНО в других случаях
И т. д.
Строки могут быть равными или не равными (учитывается регистр букв).
Примеры ИСТИННЫХ условий:
1 = 1, 5 > 3, 2 <= 2, 1 <= 2, 65 <> 22, “Лес” = ”Лес”, “Горы” <> “Лес”, “Машина” <> ”МаШиНа” (*)

Примеры ЛОЖНЫХ условий:
10 = 11, 51 < 3, 25 >= 20, 0 <> 0, “Стоп” = ”Стоп!”, “Вода” = ”вода”, “Огонь” <> “Огонь” (*)

Синтаксис условия IF-THEN:

IF условие THEN
 ….
 эти операторы выполняются, когда условие ИСТИННО
 ….
ELSE
 ….
 эти операторы выполняются, когда условие ЛОЖНО
 ….
END IF

Примеры:
Принцип действия этих примеров стоит разъяснить дословно.

IF Power > 10 THEN (*)
 PRINT “Перегрузка!”
ELSE
 PRINT “Все  в порядке!”
END IF

Можно записать и так:

IF Power > 10 THEN PRINT “Перегрузка!” ELSE PRINT “Все  в порядке!” (*)

ELSE можно и не включать:

IF Points >= 5 THEN PRINT “Великолепно!” (*)

Программа, проверяющая пароль

Password$ = INPUT$(“Введите пароль:”)
IF Password$ = ”12345” THEN
 PRINT “Пароль правильный!”
 PRINT “Добро пожаловать  в систему!”
ELSE
 PRINT “Пароль неправильный. Вход воспрещен.”
END IF
WAITKEY

Программа, проверяющая, больше ли пятидесяти введенное число

A = INPUT$(“Введите число:”)
IF A > 50 THEN
 PRINT “Число больше 50”
ELSE
 PRINT “Число  не больше 50”
END IF
WAITKEY

Бесконечные циклы
Цикл, выполняющийся бесконечно много раз легко организовать с помощью команд REPEAT-FOREVER:

REPEAT
 PRINT “Это будет повторяться бесконечно!”
FOREVER

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

Остановка программы
Как же теперь остановить программу? Для этого нужно нажать на кнопку с крестом в правом верхнем углу окна.

Команда EXIT
Выходом из этого цикла (и из других тоже) служит команда EXIT:
Данная команда в дальнейшем будет использоваться для осуществления выхода из бесконечного цикла и завершения программы при нажатии клавиши "Esc".
Пример:

A = 1
REPEAT
 A = A * 2
 PRINT A
 IF A > 500 THEN
  PRINT “Слишком много!”
  EXIT
 END IF
FOREVER
WAITKEY

Управление камерой с клавиатуры
Следующее условие ИСТИННО в том случае, если в данный момент нажата определенная клавиша и ЛОЖНО, если она не нажата.

IF KEYGET (scancode) THEN

Каждая клавиша на клавиатуре имеет скан-код (scancode). В таблице по адресу Help \ Command Reference \ Scancodes приведены скан-коды для каждой клавиши. Скан-коды часто используемых клавиш приведены в памятке.
Теперь сделаем управление камерой с клавиатуры для программы "fir" - для этого мы должны создать бесконечный цикл (чтобы компьютер вновь и вновь опрашивал клавиатуру) и поместить внутри него команды поворота камеры. При этом мы должны периодически осуществлять визуализацию. Также, добавим условие для выхода из программы при нажатии клавиши ESC. Итак, заменим строки:

RENDERWORLD
FLIP
WAITKEY

на следующие:

Задаем начальные значения углов:
xa = 0
ya = 0

REPEAT

Меняем угол поворота вокруг оси OX:
 IF KEYDOWN(200) THEN xa = xa + 1; вверх
 IF KEYDOWN(208) THEN xa = xa - 1; вниз

Меняем угол поворота вокруг оси OY:
 IF KEYDOWN(203) THEN ya = ya + 1; влево
 IF KEYDOWN(205) THEN ya = ya - 1; вправо

Устанавливаем углы поворота камеры:
 ROTATEENTITY cam, xa, ya, 0

Выход  по нажатию клавиши ESC:
 IF KEYDOWN(1) THEN EXIT; ESC - выход

Визуализируем трехмерный мир:
 RENDERWORLD
 FLIP
FOREVER

Запишем эту программу под именем “fir2”.