Game Maker. Урок 3. Создание арканоида

В этом уроке мы с вами рассмотрим создание арканоида. Цель игры арканоид - разбить шариком все блоки на игровом поле. Самая фишка в том, что шарик отскакивает от стен, блоков и ракетки по законам физики(действие Bounce, если вы помните). Игрок управляет только ракеткой, от которой отскакивает шарик. Самый известный и навороченный на данный момент арканоид -гиперболоид.

Ссылка на скачивание необходимых спрайтов находится в конце урока.

Но сначала немного теории...
В этом уроке будет использован Game Maker Language(GML) - встроенный язык программирования Game Maker'a. Пугаться не стоит - это все намного проще, чем кажется. Достаточно знать английский язык на уровне 8 класса.

1. Переменные
Переменная - это особый вид данных. У каждой переменной есть имя и значение. Ограничения имени переменной :
а) Имя состоит только из цифр, букв латинского алфавита и знаков подчеркивания _
б) Максимальная длина - 64 символа
в) Первый знак в имени не может быть цифрой
г) Пробелы недопустимы
д) Нельзя использовать такие имена как :

Список (показать)
all
and
begin
break
case
continue
default
div
do
else
end
exit
global
globalvar
if
local
mod
noone
not
or
other
repeat
return
self
switch
then
until
var
while
with

Эти правила работают и для игровых ресурсов.
Значения бывают двух типов : число(real) и строка(string)
Численное значение может быть размером до 30 цифр.
Строковое - может содержать в себе все символы, которые вы только сможете в него засунуть. Оно всегда заключается в кавычки.("" или '')
Итак есть имя и есть значение. Как же их соединить? Для этого придуман оператор присваивания - знак равно.

gold = 200
hp = 100
text = "Привет!"

К переменным можно присваивать целые математические выражения, состоящие из чисел, переменных и + - * / (и функций вычисления,но об этом позже)
Строки можно только объединять при помощи знака +

moneta = 10
mech = 20
shit = 50
sumka = 2
ves = (moneta+mech+shit)/sumka
text1 = "Здравствуй, "
nick = "Вася"
text = text1+nick

2. Операторы - особые слова, позволяющие манипулировать переменными и кодом.
2.1 Вычислительные операторы.
У нас есть переменная gold, которая равна чему-то. Нам нужно от нее отнять 100. Как поступить?
Можно так :

gold = gold-100

Но с появлением вычислительных операторов все упростилось. Достаточно прописать :

gold -= 100

Аналогично поступают со знаками + * /

2.2 Оператор if-else.
Дословно переводится как Если-Иначе. Синтаксис таков:

if(<выражение>)
	{
	<действия1>
	}
else
	{
	<действия2>
	}

Тоесть переводится дословно "Если выражение - истина, то выполнить действие1, иначе выполнить действие 2"
Использование else необязательно. Если его не писать будет выполняться только действие1 если выражение истинно

2.3 Оператор !
Восклицательный знак является оператором отрицания. То есть если поставить его перед выражением в конструкции if будет выполнятся действие1 только в том случае, когда выражение - ложь.
Теперь перейдем ко встроенным переменным:
х - указывает положение объекта по оси абсцисс
у - указывает положение объекта по оси ординат
xstart - указывает положение объекта при создании по оси абсцисс
уstart - указывает положение объекта при создании по оси ординат
хprevious - предыдущее местоположение объекта по оси абсцисс
yprevious - предыдущее местоположение объекта по оси ординат
speed - скорость движения объекта
direction - направление движения объекта
И необходимо учитывать,что начало координат в игровых конструкторах находится в левом верхнем углу.
Ну, с теорией покончено!
Приступим к созданию игры.
Загрузим из папки в игру спрайты и назовите их по названиям файлов.
Теперь создадим объект o_bat и присвоим ему спрайт. Также отметим галочку "твердый". В событии нажатия стрелки влево пропишем :

х-=6

Это будет двигать объект влево на 4 пикселя каждый шаг.
Теперь в событии нажатия стрелки вправо:

х+=6

Поставим её в комнату и протестируем. При нажатии кнопок влево-вправо она двигается.
Теперь создадим объект o_wall и присвоим ему соответствующий спрайт. Также отметим флажок "твердый". Теперь в объекте o_bat в столкновении с o_wall пропишем :

x = xprevious
y = yprevious

Расставим по краям комнаты (кроме нижнего) стенки.
Теперь создаем объект o_ball и присвоим ему спрайт. В столкновении с o_wall и o_bat пропишем:

move_bounce(1)

Эта функция является аналогом действия Bounce.
В создании пропишем :

direction = random(360)
speed = 6

Функция random(n) - выбирает случайное число в промежутке от 0 до n.
Теперь создадим объект o_brick и назначим ему твердость.
В создании напишем:

sprite_index = choose(s_brick_1,s_brick_2,s_brick_3)

Функция choose(m,n,b,..) - выбирает одно из указанных значений
В столкновении с шариком :

instance_destroy()

Функция instance_destroy() - уничтожает экземпляр
Теперь вернемся к шарику и в столкновении с o_brick напишем :

move_bounce(1)

Теперь расставим объекты по комнате и протестируем. Все в порядке, но стенки плохо выглядят на фоне кирпичиков и ракетки. Зайдем в объект o_wall и снимем галочку видимый.
Протестируем ещё раз... Вроде все хорошо, но когда шарик вылетает за пределы комнаты ничего не происходит. Ну ничего, мы это исправим... В событии outside room пропишем :

room_restart()

Функция room_restart() - перезапускает комнату.
Протестируем ещё раз. Теперь игра готова.
В следующем уроке : мы рассмотрим создание простейшей TDS(Top Down Shooter) игры. Эта игра потребует от вас полной версии Game makera. Её можно купить или воспользоваться "Тем самым"

И ещё...
Просьба оставить комментарий к статье - достаточно ли она понятна и все такое. Если у меня будет много читателей это существенно поднимет мне боевой дух)