00017. Условия в Sanny Builder (Часть 1)
Условия в Sanny Builder (Часть 1)|Наконец мы дошли до условий! Весь скриптинг, как и большинство языков программирования, состоит из сплошных условий.|wmysterio|wmysterio||||Что же такое условие? Условие — это проверка на правдивость или ложь какого либо действия или события в игре. То есть скрипт будет продолжаться только тогда, когда будет выполнены ( или не выполнены ) условия.
Что бы написать условие особых знаний не нужно. Для этого нужно написать слово if. После этого написать условие которое мы хо тим проверить на правдивость или ложь. Давайте напишем небольшой пример:
// ...
create_thread @METKA
end_thread
:METKA
thread 'METKA'
wait 0
$DIMA = 0
:METKA_1
wait 0
IF
$DIMA == 1
JF @METKA_1
end_thread
В нашем примере мы проверяем на правдивость ( далее - истину ). То есть проверяем: равна ли переменная "$DIMA" числу 1. Если переменная будет равна, то мы продолжаем движение по скрипту, иначе делаем прыжок на какую-то метку ( в нашем случаи мы прыгаем на метку ":METKA_1", так, как ранее мы задали ей значение 0 ). И так пока переменная каким-то образом не станет единицей мы будем прыгать так по кругу. Давайте графически представим наш скрипт:

В нашем случаи:
IF - указываем компилятору, что сейчас будет проверка
$DIMA == 1 - это и есть сама проверка. На этом месте всегда пишется условный опкод
JF @METKA_1 - указываем куда будет прыгать шарик, если условие НЕ выполнилось.× **ВАЖНО:** знаки **=** и **==** не одно и тоже! **==** является проверкой! Так же проверками будут знаки: **<=** и **>=** ( меньше равно, больше равно ).
Наш пример скрипта проверяет на правдивость. Что бы была проверка на ложь, нужно перед проверкой написать слово not. Вот пример скрипта:
// ...
create_thread @METKA
end_thread
:METKA
thread 'METKA'
wait 0
$DIMA = 0
:METKA_1
wait 0
IF
NOT $DIMA == 1
JF @METKA_1
end_thread
То есть фактически мы можем сказать о проверка: переменная "$DIMA" не равна "1"? Можно сказать что мы спрашиваем в игры :) Рассмотрим графический вариант:

Принцип работы скрипта остаётся такой же, как и предыдущий вариант. Нас интересует проверка с "not". Мы проверяем переменную, то есть спрашиваем: "Переменная $DIMA не равна 1?". Так как в нашей переменной ранее был записан ноль, то условие срабатывает, потому что 0 не равен 1 в текущий момент. Скрипт идёт дальше ( не прыгает на метку, как в предыдущем варианте ) и в конце-концов доходит до завершение потока.
× **Примечание:** На самом деле условие выполняет проверки всегда на истину. Поэтому и есть вариации проверок ( с not или без ).
Очень часто приходится проверять на выполнение сразу нескольких условий. Для этого нужно после слова "if" дописать слово "and", то есть в нас должно получится: if and. После этого нужно написать несколько условных опкодов. Здесь есть ограничение: нельзя написать больше 9-и условий, иначе компилятор нам сообщит: "Неверное число условий. Максимум 9.":

Давайте напишем пример скрипта, где используются несколько условий:
// ...
create_thread @METKA
end_thread
:METKA
thread 'METKA'
wait 0
$DIMA = 0
$WASYA = 1
:METKA_1
wait 0
if AND
$DIMA == 0
$WASYA == 1
jf @METKA_1
end_thread
В нашем случаи есть две переменных. А проверяем мы:
- Равна ли переменная $DIMA числу 0;
- Равна ли переменная $WASYA числу 1;
Другими словами, если ВСЕ проверки будут истинными, то поток завершится.
Если оба условия выполняются мы продолжаем скрипт до его конца. Если мы напишем возле "$DIMA" слово "not", то условия не будут выполнятся и мы будем постоянно прыгать на назначенную метку до тех пор, пока каким то образом в переменной "$DIMA" не будет 0.
Так же в скриптинге существует условие if or. То есть если хотя бы одно условие будет выполнено. Возьмем для примера тот же скрипт, только немного его изменим:
...
create_thread @METKA
end_thread
:METKA
thread 'METKA'
wait 0
$DIMA = 1
$WASYA = 1
:METKA_1
wait 0
if OR
$DIMA == 0
$WASYA == 1
jf @METKA_1
end_thread
В нашем случаи обе переменных равны единице. Мы можем спросить: "Переменная $DIMA равна 1 ИЛИ переменная $WASYA равна 1?" В нашем примере выполняется 1-но условие, поэтому дальше будет завершен поток. Если все условие не выполнялись бы, то мы сделали прыжок на метку ":METKA_1". И так до тех пор, пока хотя бы одно условие не будет выполнено.
Расскажу ещё несколько слов о команде jf. Она используется всегда после всех условных опкодов, использующийся в условиях "if", и выполняет переход в случае истинности всех переданных проверок.|3972|1|0|18698668
png
910281
400123``\|40510976
png522
273400
209\|90941240`png`443`131`400`118
||uslovija_i_klassy_v_sanny_builder_chast_1|1498498758