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|18698668png910281400123``\|40510976png522273400209\|90941240`png`443`131`400`118||uslovija_i_klassy_v_sanny_builder_chast_1|1498498758

Last updated