Операторы ветвления очень полезный инструмент, который позволяет выполнять действия в зависимости от условия. Если условие истина, выполнить, скажем, бросок мяча, если ложно, уронить мяч.
Подробнее об условиях.
Условия разбирались в статье ACS. Циклы. Но для тех кто не читал эту статью, приведу примеры условий ниже.
- n < 15 — истина когда n меньше 15, 15 уже ложь
- n > 15 — истина когда n больше15, 15 уже ложь
- n <= 15 — истина когда n меньше или равно 15, то-есть 15 тоже истина
- n >= 15 — истина когда n больше или равно 15, то-есть 15 тоже истина
- n == 15 — истина когда n равно 15
- n != 15 — истина когда n не-равно 15
Но что если я вам скажу, что примеры условий на самом деле возвращают значение, и это значение типа правда/ложь(true/false) то-есть, значение типа bool. Зная это, можно увидеть следующие
- Если n = 15 то
- n < 15 — false
- n > 15 — false
- n <= 15 — true
- n >= 15 — true
- n == 15 — true
- n != 15 — false
А также это значит, что условие можно присваивать к переменной, и хранить значение.
int iq = 200;
bool cognito_ergo_sum = iq >= 150;
Так как iq = 200, что больше 150, то значит, значение cognito_ergo_sum = true, правда.
В текущем случае, код выше для компьютера, будет выглядеть так.
int iq = 200;
bool cognito_ergo_sum = TRUE;
Но понятное дело, что это только для этого случая, если iq снизится до 50(после просмотра трендов ютуба), то cognito_ergo_sum уже будет false.
IF/Else Если/Иначе.
IF. Если.
Начнем с самого популярного оператора ветвления if, его можно использовать без else. Синтаксис у него следующий
if(условие)
{
...
комманды
...
}
Работает все просто, если условие правда, то выполняется код, написанный в блоке if(код в фигурных скобках). Если ложь ты вообще не выполняется, а просто, пропускается.
Пример:
int iq = 50;
if(iq >= 150)
{
print(s:"у тебя будет хорошая жизнь, то о чем ты мечтал еще с детства станет явью");
print(s:"твоя жизнь, будет прекрасной, тебя не забудут, у тебя будет не так много друзей, зато будет много приятелей");
print(s:"но друзья будут по настоящему ценны для тебя, не предадут, не обманут, и всегда помогут");
print(s:"и вот ты дожил до смерти, ты уже все попробовал, ни о чем не жалеешь, и счастлив, счастлив, как и всегда");
}
print(s:"смерть");
К сожалению, результат условия iq > 150, не выполнен, поэтому ты получишь сообщение «смерть», и на этом точка.
If/Else Если/Иначе
Else(Иначе) не может существовать без If(Если). Синтаксис у него следующий.
if(условие)
{
...
комманды
...
} else {
...
комманды
...
}
Если условие true то выполняется код в блоке if, а если условие false, то выполняется код в блоке else.
Продолжение примера:
int iq = 50;
if(iq >= 150)
{
print(s:"у тебя будет хорошая жизнь, то о чем ты мечтал еще с детства станет явью");
print(s:"твоя жизнь, будет прекрасной, тебя не забудут, у тебя будет не так много друзей, зато будет много приятелей");
print(s:"но друзья будут по настоящему ценны для тебя, не предадут, не обманут, и всегда помогут");
print(s:"и вот ты дожил до смерти, ты уже все попробовал, ни о чем не жалеешь, и счастлив, счастлив, как и всегда");
} else {
print(s:"у меня была хорошая жизнь, пока я был в школе, колледже, эх... вернуть бы те деньки");
print(s:"а сейчас работа, работа, работа, кручусь в чертовом колесе, под названием реальная жизнь");
print(s:"сейчас времени ни на что нет, моя жизнь ни то что-бы плохая, но и хорошей её не назвать не могу я чувствую себя среднячком");
print(s:"почему, я не родился в богатой семье, ведь везет же некоторым, и моя травма детства, когда учительница поставила 2");
print(s:"или когда, мама порола ремнем, мне же больно было, из-за этого теперь имеем что имеем, эх...");
print(s:"друзья, ну вы то куда ушли, я попал в трудную ситуацию, помогите, почему вы меня бросили, твою ж");
print(s:"и вот я дожил до смерти, последние 3 года своей жизни копил деньги на похороны, как же я жалок");
print(s:"чем же я так согрешил, что попал в ад раньше времени, раз уж здесь было так плохо, то возможно, просто возможно");
print(s:"после смерти я попаду в рай, как мученик, ведь рай существует, я верю в это, нечего томить, вперед к лучшей жизни");
}
print(s:"смерть");
К сожалению, в этом примере выполнится код в блоке else.
If/Else if. Если/Иначе если
Синтаксис у else if следующий:
if(условие1)
{
...
комманды
...
} else if(условие2) {
...
комманды
...
}
Если условие1 — ложь, то проверяется 2ое условие. Если условие2 — ложь, то ничего не происходит, если истина то выполняется код в блоке else if.
Можно приписать else после else if, тогда код в блоке else будет воспроизведен, только если условие1 и условие 2 являются ложью.
if(условие1)
{
...
комманды
...
} else if(условие2) {
...
комманды
...
} else {
...
комманды
...
}
Хорошо, хватит теории, приступим к практике.
Открываем дверь, за деньги
- Сначала, поместите на карту 2 переключателя и дверь. По задумке, первый переключатель будет давать деньги, а второй открывать дверь, но только в том случае, если достаточно денег.
- Первый переключатель будет выполнять script 1
- Второй, будет выполнять script 2
- Дверь у нас будет, с тегом 1
- Теперь, напишите следующий код
#include "zcommon.acs"
int money = 0;
script 1 (void)
{
money++;
print(i:money);
}
script 2 (void)
{
if(money >= 10)
{
print(s:"door opened");
Door_Open(1,64,0);
} else {
print(s:"you need 10$ to open the door");
}
}
Теперь разберем код.
script 1 (void)
{
money++;
print(i:money);
}
script 1 — увеличивает количество денег на единицу, затем выводит на экран
script 2 (void)
{
if(money >= 10)
{
print(s:"door opened");
Door_Open(1,64,0);
script 2 — проверяет условие money >= 10, если количество денег больше 10, то появляется сообщение «door opened«. А также, открывается дверь.
} else {
print(s:"you need 10$ to open the door");
}
}
Иначе, появляется сообщение говорящее о том, что не достаточно денег.
Комманда Door_Open(…) отвечает за открытие двери, синтаксис у неё следующий.
Door_Open(тег_сектора_двери, скорость_открытия, тег_сектора_света)
В нашем примере, дверь имеет тег 1, и открывается со скоростью 64, тег сектора света не установлен, поэтому 0.
Подробнее на вики.
Door_Open(1,64,0);
Теперь можете запускать.