- •Содержание:
- •Переменные:
- •Логические Операторы и Операции:
- •Логическое && и.
- •Логическое || или
- •Оператор побитового Или |
- •Оператор побитового и &
- •Оператор Круглые Скобки ()
- •Стандартные События объекта.
- •Условные операторы и Конструкции.
- •Условный оператор if..Else:
- •Оператор switch (Переключатель)
- •Конструкция with:
- •Операторы Цикла.
- •Оператор цикла while:
- •Оператор цикла do:
- •Оператор цикла for:
- •Оператор повторения repeat:
- •Функции:
- •Операторы прерывания: «break, exit, continue»:
- •Краткая информация: dll (Dynamic Link Library) библиотеки расширения:
- •Структуры данных:
- •Частицы (Эффекты):
- •Многопользовательские игры (с использованием стандартных средств):
- •3D Графика (3d Режим):
- •Как найти быстро нужную функцию по справке и где её использовать (По логике):
- •Начало:
- •Давняя традиция «Hello World!» или «Привет Мир!»:
- •Работа с текстом:
- •Работа с Числами (Уровень игрока):
- •Создаем «Healthbar» (Индикатор уровня здоровья):
- •Движение в 4 стороны:
- •Drag&Drop или “Тяни и кидай”:
- •Башня с пушкой:
Работа с текстом:
Давайте, раз уж мы начали с текста, то немного поработаем с ним.
Выведем текст над объектом, например, это Имя.
Но сначала, создайте новый объект и сделайте ему любой спрайт.
В событии создания этого объекта пишем:
playerName = “Player1”;
В событии рисования:
draw_text(x-sprite_xoffset,y-sprite_yoffset-16,playerName); // Объясню ниже
draw_sprite(sprite_index,-1,x,y); // Рисуем спрайт объекта в позиции x,y, со всеми кадрами -1.
Первое что я хочу, что бы вы обратили особое внимание на запись: sprite_index
Это говорит о том, что мы рисуем спрайт, который применен к объекту, нам нужно рисовать спрайт тогда, когда мы используем событие рисования, и это логично, поскольку за рисование на экране теперь отвечаем мы, но в любом случае вы должны присвоить какой-то спрайт объекту, перед тем как написать подобную запись.
draw_text(x-sprite_xoffset,y-sprite_yoffset-16,playerName);
Где «sprite_xoffset» и «sprite_yoffset» хранят в себе как бы границу спрайта, например, если это 32 пиксела по координате x, то мы отнимаем эти 32 от координаты x нашего объекта.
Но с координатой «y» происходит немного другая история, мы отнимаем ещё и -16, почему так?
Потому что текст, который мы собираемся написать, имеет высоту примерно в 16 пикселов, поэтому мы и их должны учитывать.
Надеюсь, вы понимаете, что нужно поставить этот объект в игровую комнату.
При движении объекта, текст будет всегда находиться над ним.
Попробуйте, добавьте код в событие создания: hspeed = 1; или vspeed = 1;
Так же, хочу сказать вам, не бойтесь экспериментировать! Это очень помогает понять детали.
А давайте теперь добавим к имени вывод координат на экран, изменим строчку:
draw_text(x-sprite_xoffset,y-sprite_yoffset-16,playerName+” X: ”+string(x)+” Y: ”+string(y));
Не забыли? Почему мы переводим x и y, в строку? Если забыли - вернитесь и повторите тему.
Вернемся к теме.
Что я хочу вам показать данной строчкой?
То, что мы можем показывать любые доступные свойства объекта, собственные переменные, и смешивать их всех вместе, с помощью конвертации.
«Хочу сказать, что мы больше не будем называть Игровой уровень – Комнатой, мы будет называть это игровым полем».
И так, продолжим:
Давайте теперь, совместим цикл «for», «Массив» и функцию рисования текста «draw_text_color».
В событие создания объявим массив и заполним его значением, пусть это будут имена:
nameUser[0] = “Victor”;
nameUser[1] = “Ivan”;
nameUser[2] = “Masha”;
nameUser[3] = “Dasha”;
nameUser[4] = “Petro”;
В событие рисования:
for(n = 0; n <= 4; n += 1)
{
draw_text_color(x,y+16*n,nameUser[n],c_red,c_red,c_blue,c_red,1);
}
В итоге мы получим спускающийся цветной список имен.
Работа с Числами (Уровень игрока):
За основу я возьму часто задаваемый вопрос, как сделать Уровень игрока, и как сделать остальные показатели, что бы они увеличивались на какую-то долю после повышения уровня.
И так, нам нужны переменные Уровня, Здоровья, Атака, Защита (Броня), но нам нужна и проверка на максимально возможное значение.
Создайте новый проект, создайте объект назовите его obj_Controller, отметьте галочку «Постоянный» (Persistent), и поместите его в комнату, в левый верхний угол.
В событии создания:
globalvar glob_maxLevel, glob_maxHP, glob_maxAtt, glob_maxDef;
glob_maxLevel = 60;
glob_maxHP = 1000;
glob_maxAtt = 120;
glob_maxDef = 200;
Глобальные переменные, они нам нужны для проверки на максимально доступное количество.
Теперь, создайте ещё один объект назовите его obj_Player, и поместите его в комнату, создайте ему Спрайт (любой).
Сначала мы объявим локальные переменные, затем сделаем проверку на то, есть ли превышение за максимальное количество, пишем:
level = 1;
lvlHP = 245;
lvlAttack = 15;
lvlDefense = 20;
if(level > glob_maxLevel)
{
level = glob_maxLevel;
}
if(lvlHP > glob_maxHP)
{
lvlHP = glob_maxHP;
}
if(lvlAttack > glob_maxAtt)
{
lvlAttack = glob_maxAtt;
}
if(lvlDefense > glob_maxDef)
{
lvlDefense = glob_maxDef;
}
Давайте выведем всё на экран, событие Draw (Рисование):
draw_text(x-16,y-100,”LVL: ”+string(level)+”#HP: ”+string(lvlHP)+”#Att: ”+string(lvlAttack)+”#Def: ”+string(lvlDefense));
draw_sprite(sprite_index,-1,x,y);
Далее, добавьте ещё одно событие, Другие->Событие, определяемое пользователем (Other->User Defined) добавьте нулевой, и пишем в нем:
if(level == 2)
{
lvlHP += 15;
lvlAttack += 2;
lvlDefense += 3;
}else if(level == 3)
{
lvlHP += 15;
lvlAttack += 2;
lvlDefense += 3;
}else if(level == 4)
{
lvlHP += 15;
lvlAttack += 2;
lvlDefense += 3;
}else if(level == 5)
{
lvlHP += 15;
lvlAttack += 2;
lvlDefense += 3;
}else if(level == 6)
{
lvlHP += 15;
lvlAttack += 2;
lvlDefense += 3;
}
Сделайте ещё один объект и назовите его obj_Enem, и сделайте ему Спрайт (любой), затем поместите несколько таких объектов в комнату.
Создайте ему событие создания, и пишем:
hp = 100;
Добавьте ему событие Мышь -> Левая отпущена (Mouse->Left Released), и пишем.
hp -= 25+irandom(obj_Player.lvlAttack); // От 25 до 40, при первом Уровне игрока.
if(hp < 1)
{
with(obj_Player)
{
level += 1;
event_user(0);
}
instance_destroy();
}
Теперь можно запустить и покликать на наших врагов, и посмотреть на результат.
Ну а сейчас я объясню немного:
В начале, мы создаем все нужные нам переменные, затем проверяем их на превышение максимального количества. Затем, мы выводим на Экран наши данные.
Затем, мы создали проверку, в зависимости от уровня мы повышаем характеристики игрока, но тут есть одно но, мы не проверяем это постоянно, мы проверяем это при каждой смерти врага, за счет вызова event_user(0). Я думаю это хорошо.
Функция irandom аналогична функции random, разница лишь в том, что irandom округляет число до целого.
Разберитесь с этим полностью до миллиметра, возможно, это не лучший вариант, но если вы поймете, как сделать лучше и сделаете, то это лишь огромный плюс к вашему учению и не только.
Задача 01:
«Сделайте игроку «Опыт», что бы в зависимости от его количества менялся Уровень.»
двигаемся дальше.
