ACS. Операторы ветвления if/else.

Операторы ветвления очень полезный инструмент, который позволяет выполнять действия в зависимости от условия. Если условие истина, выполнить, скажем, бросок мяча, если ложно, уронить мяч.

Подробнее об условиях.

Условия разбирались в статье 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);

Теперь можете запускать.

Итоговый результат.

avatar

Пожалуйста отключи блокировщик рекламы, или внеси сайт в белый список!

Please disable your adblocker or whitelist this site!