Доброго времени суток! Начнём одиннадцатую серию нашей учебной эпопеи. Эта серия особенная. Она завязывает интригу перед концом второго сезона. Проще сказать, сегодня мы будем готовиться к контрольной работе.
Подготовка к
Контрольной
Работе
№2
Часть полезных советов была в уроке № 9. Напомню их
1)
Создание объекта относительно краёв комнаты. Используются константы room_width, room_height. Например
instance_create(room_width-5, room_height/2, obj)
2)
Создание объекта относительно положения мыши. Используются константы mouse_x, mouse_y. Например
instance_create(mouse_x+7, mouse_y-4, obj)
3)
Создание n объектов через одинаковое расстояние t начиная с m по горизонталиfor(i=0; i<n; i+=1)
{
instance_create(m+i*t, y, obj)
}
3.1) --
по вертикалиfor(i=0; i<n; i+=1)
{
instance_create(x, m+i*t, obj)
}
PS : если надо в обратном порядке, то минус заменяем на плюс
4)
Создание объекта в случайном месте.instance_create(random(room_width), random(room_height), obj)
5)
Создание случайного объектаinstance_create(xx, yy, choose(obj1, obj2, obj3 ... obj16))
ИЛИ (на более 16 объектов)
object[0]=obj0
object[1]=obj1
object[n]=objn
...
instance_create(xx, yy, object[irandom(n)])
6)
obj1 сталкивается с obj2, при этом obj1 должен исчезнутьwith(self)
{
instance_destroy()
}
ИЛИ
with(other)
{
instance_destroy()
}
7)
Уничтожение объекта, если тот ниже нижней границы окна (например если игрок упал в пропасть в платформере)
if(y>room_height)
{
instance_destroy()
}
8)
Завершить или перезапустить игру, если кончились жизни (или здоровье)if(<переменная, отвечающая за здоровье или жизни><=0)
{
game_end()//или game_restart()
}
Теперь поговорим о манёврах с переменными. В прошлом подобном уроке (№5) я поведал о способе булевых переменных. Напомню, этот способ применяется, если вы хотите, чтобы отдельные участки кода выполнялись в нужное вам время. Новый способ понадобится вам для реализации примерно следующего запроса.
Если <определённое событие> повторяется n раз...
Собственно это счётчик событий с проверкой.
Например, если игрок нажал пробел 10 раз, то показываем сообщение "Вы нажали пробел 10 раз". Видимо нам придётся считать события, а именно нажатие пробела.
Заведём переменную, с помощью которой мы будем считать
count=0
А при нажатии пробела будем её
инкрементировать (увеличивать на 1)
count+=1
Учитесь перестраивать запросы, учитывая то, что уже сделали. Например запрос "Если нажали пробел 15 раз...", учитывая код, который мы только что написали будет звучать так "Если count равна 15..."//нажали пробел заменили на count, а дальше дело русского языка
Этот запрос вы уже должны уметь реализовывать
if(count==15)//почему стоит ==? Все ответы в третьей четверти! :)
{
show_message("Вы нажали на пробел 15 раз!");
count=0//обнуляем счётчик для многоразового использования
}
Есть и другой способ. Например, в Create объявить переменную count равную 15, а в нажатии пробела её
декрементировать (уменьшать на 1) (не забудьте проверять её на равенство нулю if(count==0))
У этого способа есть несколько плюсов. Например, не надо бегать по событиям, если вы захотите изменить число, а достаточно зайти в Create и изменить его там. Но вообще, эти способы ничем не отличаются.
Тот же способ можно расширить с предварительной проверкой. Возьмём наш пример и усовершенствуем. Например, если игрок нажал пробел 3 раза, то мы запрашиваем у него число и потом выводим его; если 7 раз, то показываем сообщение "Пробел нажат 7 раз. Осталось ещё 3"; если 10 раз, то завершаем игру.
Начнём реализацию
count=0;
max_count=10;//максимальное количество при счёте (для удобства изменения)
count+=1;
if(count==3)
{
a=get_integer('Введите число', 0)//заметьте, 0 без кавычек! буду снижать оценки за такую халатность!
show_message(string(a))//не забываем про string()
}
if(count==7)
{
show_message("Вы нажали на пробел "+string(count)+" раз. Осталось ещё "+string(max_count-count)+" раз")//разберитесь с этим кодом
}
if(count==max_count)
{
game_end();
}
Вот так. Научитесь видеть ситуации, где можно применять этот способ. Он универсален и очень полезен.
Что ж, удачи вам. Желаю вас увидеть на контрольной работе, которая состоится
11 сентября.