Рейтинг - 0.0 (0)

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

Что же такое условие? Условие — это проверка на правдивость или ложь какого либо действия или события в игре. То есть скрипт будет продолжаться только тогда, когда будет выполнены ( или не выполнены ) условия.

Что бы написать условие особых знаний не нужно. Для этого нужно написать слово 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 в текущий момент. Скрипт идёт дальше ( не прыгает на метку, как в предыдущем варианте ) и в конце-концов доходит до завершение потока.

Очень часто приходится проверять на выполнение сразу нескольких условий. Для этого нужно после слова "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

В нашем случаи есть две переменных. А проверяем мы:

  1. Равна ли переменная $DIMA числу 0;
  2. Равна ли переменная $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", и выполняет переход в случае истинности всех переданных проверок.


Теги: jf, jump_if_false, условия, if or, if and, if

roper19   (25.01.12 23:42)
стоп а зачем вообще нужно проверять правдивость или ложь??? Зачем это нужно?

wmysterio   (07.02.12 17:56)
все программы пишутся на условиях, и в зависимости от возвращаемого значения(истина или ложь) могут выполнятся разные действия. Например если мы в MS Word хотим сохранить документ. Нам нужно нажать на дискетку вверху. Тогда в программе уже записано условие: Кнопка нажата? Если мы не нажмём её, то программа получит ложь(не нажата) и никаких действий не произойдёт, а если мы всё же нажмём её(то есть программа получит истину), тогда документ сохранится.

Если кратко, то в зависимости от того, что вернёт нам проверка мы можем сказать игре что делать.

OnYnEвWuЙ_4eЛ   (15.05.12 16:21)
Да, сложно но интэрэсдно!)
Вход на сайт

Поиск
Категории раздела
Мини-чат
Пожалуйста, все вопросы по скриптингу задавать на форуме!
Наш опрос
Какая GTA Вам понравилась больше всего?
Всего ответов: 7
Активность на сайте
Пожертвования
Кошельки WebMoney:
U859420971000
R407741810602
Z331072372430
E314272616890
Друзья сайта
Полезные ресурсы
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Сегодня нас посетили:
Реклама