Циклы и конструкция switch

WME поддерживает два типа циклов: for и while.

Цикл for

Конструкция for задаёт переменную-счётчик, условие выполнения цикла и вычислительную операцию с счётчиком. Перед каждой итерацией цикла проверяется заданное условие. Если оно истинно, то код, помещённый внутри тела цикла, выполняется. Если же нет, код не выполняется, а программа продолжает работу с первой строчки кода, идущей после цикла. После каждой итерации значение переменной-счётчика изменяется в соответствии с заданным правилом.

 

Пример - цикл перебирает значения с 0 до 9:

 

for(var i=0; i<10; i=i+1)
{
  // ... некоторый программный код
}

Внимание: WME не поддерживает операторы инкремента (++) и декремента (--).

 

Цикл while

Цикл while подобен циклу for. Разница в том, что конструкция while не содержит счётчика. Код внутри тела цикла выполняется до тех пор, пока заданное условие истинно.

Пример:

var MyVar = 5;
while(MyVar > 0)
{
  MyVar = MyVar - 1;
}

 

Синтаксис операторов break и continue

Оператор break используется для прерывания цикла.
Оператор continue пропускает следующий за ним код в теле цикла и переходит к следующей итерации.

Пример:

actor.GoToAsync(100, 200);
while(true) // бесконечный цикл
{
  if(actor.Ready) break; // закончить выполнение цикла, если персонаж остановился
  Sleep(20); // иначе передать управление движку и продолжить выполнение цикла
}

 

Конструкция switch

Конструкция switch позволяет выполнять определённые куски кода, в зависимости от того, какое значение принимает указанное выражение.

switch (выражение)
{

   case значение :
       программный код
   case значение :
       программный код
   ...
   default :
       программный код
}

В этой конструкции вычисляется указанное выражение и проверяется на соответствие заданным значениям. Когда будет обнаружено совпадение с одним из значений, выполняется программный код от этой метки до оператора break, или же до конца конструкции switch.

Ветка default (по умолчанию) выполняется в том случае, если не было найдено соответствия ни одному из указанных значений. Метка default должна всегда быть последней в списке.

Пример:

switch (Color)
{
  case "чёрный":
    actor.Talk("Жутко");
  break;

  case "красный":
    actor.Talk("Красиво");
  break;

  case "жёлтый":
    actor.Talk("Ярко");
  break;

  default:
    actor.Talk("Нейтрально");
}