Основы GML: Переменные, условия, циклы.

Добавлен , опубликован
Раздел:
Game Maker
Всем привет. Это будет мой первый урок, как на этом сайте, так и вообще, поэтому прошу оценить и, по возможности, указать на ошибки.
Итак, читатель, ты перешел к замечательному конструктору игр Game Maker! Но, как известно, начинающему игростроителю хочется более гибких вещей, чем кнопки и стандартные действия. На помощь нам приходит Game Maker Language (GML), о котором в последствии и пойдет речь.
Однако, мы не будем медлить, и приступим.
Организационный момент
Итак, цикл моих уроков будет требовать от вас:
  1. Начальные знания ГМ. Уметь худо-бедно делать игры на кнопках.
  2. Game Maker версии 8, Pro редакции. Я не запрещаю использовать другие версии, но все примеры наверняка будут работать в этой версии и выше.
  3. Голова на плечах, терпение и труд.
Если нам потребуется еще что-то по ходу пьесы, то я об этом предупрежу.
Вы готовы? Начнем-с!

Переменные

Первое понятие, которые вы должны усвоить - это переменные. Без них создание игры немыслимое дело. Так что это такое? Посмотрим на научное определение:
Переменные - это особый вид данных, способный хранить или изменять в себе определённое значение.
У каждой переменной есть своё имя. У имён переменных есть свои правила и ограничения
  1. Имя переменной может состоять только из букв латинского алфавита, цифр и символов подчёркивания _
  2. Первым символом в имени не может быть цифра
  3. В имени не может быть пробелов
  4. Максимальное длина имени - 64 символа
Чтобы запихнуть какое-либо значение в переменную, нам стоит прибегнуть к операции присваивания.
<переменная> = <выражение>;
Как она действует? Очень просто, она перекидывает все из правой части в левую.
Непонятно? Смотрим пример.
a=5; //Все верно.
b=a+15; //В выражении могут быть и арифм. действия. Когда мы вызываем переменную справа от знака присвоения, то она заменяет себя на значение, что в ней хранится. В данном случае это a=5, и фактически это выражение можно понять так b=5+15
c=a+b; //Выражение может состоять полностью из переменных.
Какие могут возникнуть ошибки:
123abc = 16; //Неприемлемо, ибо имя переменной не может начинаться с цифры.
vasya pupkin = 56; //В имени переменной не может быть пробела
привет = 1; //Переменную нельзя называть по-русски
c; //Что с? Ничего не происходит - это ошибка.
c 77;//Пропущен знак операции присваивания =
c=; //Неверная запись, в правой части обязательно должно что-то быть
=77;//Неверная запись, в левой части обязательно должно что-то быть
Но, не числами едиными жив человек. В ГМ существует 2 типа данных - числа и строки. Для чего это? Чтобы исключить возможность ошибок.
Чтобы дать понять, что это строка, надо заключить текст или цифры(!) в двойные или одинарные кавычки. Внимательно рассмотрите пример.
a=’Привет’; //Можно так
b=”Автор”; //А можно и так
c=’123’; //Это - строка
d=56+c; //Тут притаилась ошибка, ведь 56 - это число, а ‘123’ - строка
e='5'; //С этим все понятно, надеюсь
f=e+c; 
Последняя строка нуждается в объяснениях. Думаете, в переменной f будет '127'? Нет, в ней будет '5123'. Тут не действует переместительный закон сложения, потому что если бы мы написали f=c+e, то в переменной f было бы значение '1235'. Это важно понимать.

Условия

В жизни нам часто приходится сравнивать какие-то вещи. Что больше - 5 или 10? Кто выше - Петя или Вася? А кто из них сильнее? И другое. Такие проверки нам позволяет и GML с помощью оператора if, или оператор условия. Различают полный и не полный оператор, вот их конструкция:
//Полный
if (условие) {
      действия
} else {       
      действия
}

//Неполный
if (условие) {
      действия
}
Объясняю популярно, как это действует. ЕСЛИ (if) <условие> ИСТИННО, ТО ВЫПОЛНИТЬ <действия>. ИНАЧЕ (else) ВЫПОЛНИТЬ <действия>. В укороченной форме, очевидно, вторая часть отсекается. Рассмотрим на конкретном примере
a=50;
b=20;
if (a>b) {
    c=a-b;
} else {
    c=b-a;
}
Что этот кусок кода делает? Он сравнивает два числа, и из большего вычитает меньшее. Поскольку мы еще не умеем задавать случайные числа, то мы задали конкретные значения - 50 и 20. Как сравнивать числа с помощью знаком нам знакомо со школы, но давайте я вам напомню кое-что:
> - больше
< - меньше
>= - больше или равно
<= - меньше или равно
!= - не равно
== - равно
Теперь поговорим о сложных условиях, так как не все так легко в нашем временном мире. Давайте поставим задачу:
Если переменные а и b равны и больше нуля, то их надо сложить, а иначе - вычесть.
Как бы эту задачу мы решили сейчас? Вот так:
a=50;
b=50;
if (a==b) {
    if (a+b>0) {
        с=a+b;
    }
} else {
    с=a-b;
}
Забыл упомянуть, что в условии могут быть еще условия, чем бы собственно сейчас и воспользовались. Как громоздко для решения такой простой задачи, может быть есть более изящный способ? Да, он есть. Смотрим:
a=50;
b=50;
if (a==b) && (a+b>0) {
    c=a+b;
} else {
    с=a-b;
}
Вот и все. Но что же означает
(a==b) && (a+b>0)
эта запись? Это так называемые сложные условия. && можно заменить союзом и. Существует также || - его можно заменить союзом или. Есть и другие бинарные операторы(&&, ||), но мы поговорим о них позже.

Циклы

А вот это уже серьезная тема. Для начала разберемся, зачем нам это надо. Например, мы ходим 10 раз прибавить к переменной a число 10. Конечно можно тупо в лоб, 10 раз повторить одну и ту же строчку. Но программист - ленивый и дальновидный человек, так и были изобретены циклы.
1. Цикл Repeat
Как же всё-таки решить нашу задачку? Прибегнем к помощи цикла repeat, и наш код приобретет вид:
a=0;
repeat(10) {
     a+=10;
}
В использовании, как видим, Repeat очень прост. Пишем ключевое слово repeat, в скобках пишем, сколько раз повторить, и в фигурных скобках пишем, какие действия. Что означает а+=10? Я же говорил, что программисты люди ленивые. И вместо такой записи:
а=а+10;
Можно использовать другую:
а+=10;
P.S. - Данная запись относится не только к сложению. То есть можно использовать и записи вида: a*=10, a/=10, a-=10
2. Циклы с пост-условием и с пред-условием
Все бы хорошо, но когда мы не знаем, сколько раз нам нужно выполнить то или иное действие? Что делать? Например, добавлять к переменной а число 10 до тех пор, пока а не станет равным 100. Мы конечно знаем, сколько раз надо это сделать, но в целях обучения притворимся, что не знаем =)
Так что же делать? Выход есть - воспользоваться циклами с условиями. Их существует всего два - While и Do...Until.
Решаем задачу с помощью цикла While:
a=0;
while (a!=100) {
     a+=10;
}
Цикл While называется циклом с пред-условием, поскольку сначала проверяется условие, а потом выполняются действия. Конструкция его ясна-понятна:
While (условие) {
   действия
}
Теперь рассмотрим решение задачи с помощью цикла Do...Until:
a=0;
do {
   a+=10;
} until (a!=100);
Да, цикл Do...Until работает как некоторые люди в наше время. Сначала он делает, а потом думает. Эта конструкция зовется циклом с пост-условием, по причине, описанной выше. Особого разбора здесь тоже не нужно:
do {
   действия
} until (условие)
А какая же между этими циклами разница, спросите вы? Ведь и тот, и другой, проверяет и делает. Но цикл While может не выполнится ни разу, а вот Do...Until хоть один раз, да сделает свое дело.
В циклах также могут стоять спец. слова, сейчас я просто приведу цитаты из справки, а вот на деле проверять мы их будем позже.
break
Если break используется в цикле for, while, repeat, switch, или в выражении with, то оно завершает выполнение цикла или оператора. Если break используется вне этих выражений, то оно заканчивает выполнение программы (не игры).
continue
Если continue используется в цикле for, while, repeat, или в выражении with, то выполнение цикла с текущим значением прерывается и происходит со следующим значением.
exit
exit просто завершает выполнение скрипта или части кода. (exit не завершает выполнение игры!)
P.S. Также существует еще один цикл - For (цикл-счётчик), но сейчас я его объяснять не буду. Когда доберемся до массивов, вы ощутите всю его мощь, а сейчас нет особого толку о нём рассказывать.

Заключение

Вот мы и почти подошли к концу, остался последний штрих. В работе с числами, можно узнать их целую часть от деления на какое-либо число, вот таким образом
a=20 div 6;
В переменной а окажется 3, поскольку 6 умещается полностью в числе 20 всего 3 раза.
Также можно узнать остаток от деления на какое-либо число:
a=20 mod 6;
Теперь в переменной а окажется 2, потому что это остаток от деления на 6. То есть, можно вывести формулу нахождения остатка:
a = b - b div num;
Где b - число, от которого мы хотим узнать остаток, а num - число, на которое делим.
Для того, чтобы материал укрепился, я прикреплю файл, в коде которого вы должны будете исправить ошибки. Вот и всё, встретимся в следующем уроке!
Ссылка
`
ОЖИДАНИЕ РЕКЛАМЫ...