Всем привет. Это будет мой первый урок, как на этом сайте, так и вообще, поэтому прошу оценить и, по возможности, указать на ошибки.
Итак, читатель, ты перешел к замечательному конструктору игр Game Maker! Но, как известно, начинающему игростроителю хочется более гибких вещей, чем кнопки и стандартные действия. На помощь нам приходит Game Maker Language (GML), о котором в последствии и пойдет речь.
Однако, мы не будем медлить, и приступим.
Итак, читатель, ты перешел к замечательному конструктору игр Game Maker! Но, как известно, начинающему игростроителю хочется более гибких вещей, чем кнопки и стандартные действия. На помощь нам приходит Game Maker Language (GML), о котором в последствии и пойдет речь.
Однако, мы не будем медлить, и приступим.
Организационный момент
Итак, цикл моих уроков будет требовать от вас:
Итак, цикл моих уроков будет требовать от вас:
- Начальные знания ГМ. Уметь худо-бедно делать игры на кнопках.
- Game Maker версии 8, Pro редакции. Я не запрещаю использовать другие версии, но все примеры наверняка будут работать в этой версии и выше.
- Голова на плечах, терпение и труд.
Вы готовы? Начнем-с!
Переменные
Первое понятие, которые вы должны усвоить - это переменные. Без них создание игры немыслимое дело. Так что это такое? Посмотрим на научное определение:
Переменные - это особый вид данных, способный хранить или изменять в себе определённое значение.
У каждой переменной есть своё имя. У имён переменных есть свои правила и ограничения
Переменные - это особый вид данных, способный хранить или изменять в себе определённое значение.
У каждой переменной есть своё имя. У имён переменных есть свои правила и ограничения
- Имя переменной может состоять только из букв латинского алфавита, цифр и символов подчёркивания _
- Первым символом в имени не может быть цифра
- В имени не может быть пробелов
- Максимальное длина имени - 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 равны и больше нуля, то их надо сложить, а иначе - вычесть.
Как бы эту задачу мы решили сейчас? Вот так:
Теперь поговорим о сложных условиях, так как не все так легко в нашем временном мире. Давайте поставим задачу:> - больше
< - меньше
>= - больше или равно
<= - меньше или равно
!= - не равно
== - равно
Если переменные а и 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, и наш код приобретет вид:
1. Цикл Repeat
Как же всё-таки решить нашу задачку? Прибегнем к помощи цикла repeat, и наш код приобретет вид:
a=0;
repeat(10) {
a+=10;
}
В использовании, как видим, Repeat очень прост. Пишем ключевое слово repeat, в скобках пишем, сколько раз повторить, и в фигурных скобках пишем, какие действия. Что означает а+=10? Я же говорил, что программисты люди ленивые. И вместо такой записи:
Можно использовать другую:а=а+10;
P.S. - Данная запись относится не только к сложению. То есть можно использовать и записи вида: a*=10, a/=10, a-=10а+=10;
2. Циклы с пост-условием и с пред-условием
Все бы хорошо, но когда мы не знаем, сколько раз нам нужно выполнить то или иное действие? Что делать? Например, добавлять к переменной а число 10 до тех пор, пока а не станет равным 100. Мы конечно знаем, сколько раз надо это сделать, но в целях обучения притворимся, что не знаем =)
Так что же делать? Выход есть - воспользоваться циклами с условиями. Их существует всего два - While и Do...Until.
Решаем задачу с помощью цикла While:
Все бы хорошо, но когда мы не знаем, сколько раз нам нужно выполнить то или иное действие? Что делать? Например, добавлять к переменной а число 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 используется вне этих выражений, то оно заканчивает выполнение программы (не игры).
Если break используется в цикле for, while, repeat, switch, или в выражении with, то оно завершает выполнение цикла или оператора. Если break используется вне этих выражений, то оно заканчивает выполнение программы (не игры).
continue
Если continue используется в цикле for, while, repeat, или в выражении with, то выполнение цикла с текущим значением прерывается и происходит со следующим значением.
Если continue используется в цикле for, while, repeat, или в выражении with, то выполнение цикла с текущим значением прерывается и происходит со следующим значением.
exit
exit просто завершает выполнение скрипта или части кода. (exit не завершает выполнение игры!)
exit просто завершает выполнение скрипта или части кода. (exit не завершает выполнение игры!)
P.S. Также существует еще один цикл - For (цикл-счётчик), но сейчас я его объяснять не буду. Когда доберемся до массивов, вы ощутите всю его мощь, а сейчас нет особого толку о нём рассказывать.
Заключение
Вот мы и почти подошли к концу, остался последний штрих. В работе с числами, можно узнать их целую часть от деления на какое-либо число, вот таким образом
Также можно узнать остаток от деления на какое-либо число:
Для того, чтобы материал укрепился, я прикреплю файл, в коде которого вы должны будете исправить ошибки. Вот и всё, встретимся в следующем уроке!
Ссылка
В переменной а окажется 3, поскольку 6 умещается полностью в числе 20 всего 3 раза.a=20 div 6;
Также можно узнать остаток от деления на какое-либо число:
Теперь в переменной а окажется 2, потому что это остаток от деления на 6. То есть, можно вывести формулу нахождения остатка:a=20 mod 6;
Где b - число, от которого мы хотим узнать остаток, а num - число, на которое делим.a = b - b div num;
Для того, чтобы материал укрепился, я прикреплю файл, в коде которого вы должны будете исправить ошибки. Вот и всё, встретимся в следующем уроке!
Ссылка