danilaxxl danilaxxl

CollectableItemData.cs

[CreateMenuItem(fileName = "newItem", menuName = "Data/Items/Collectable", order = 51]

GoloGames GoloGames

vadya_ivan, рад, что вам игра показалась интересной : )

P.S. Кстати уже доступна бесплатная демо-версия в Steam

vadya_ivan vadya_ivan

Визуал, задумка, музыка , механики, все в цель

GoloGames GoloGames

Ato_Ome, спасибо за позитивные эмоции, будем стараться : )

Ato_Ome Ato_Ome

Потрясающий результат, все так четенько, плавненько)
То ли саунд, то ли плавность напомнили мне игрушку World of Goo, удачи вам в разработке и сил побольше дойти до релиза!)

Cute Fox Cute Fox

Graphics are a little cool, good HD content. But this game doesn't cause nary interest me.
However the game is well done.

GMSD3D GMSD3D

Почему действие после всех условий выполняется?
[step another object]

Zemlaynin Zemlaynin

Jusper, Везде, но наугад строить смысла нет. Нужно разведать сперва территорию на наличие ресурсов.

Jusper Jusper

Zemlaynin, а карьеры можно будет везде запихать?
Или под них "особые" зоны будут?

Zemlaynin Zemlaynin

Это так скажем тестовое строительство, а так да у города будет зона влияния которую нужно будет расширять.

Jusper Jusper

А ссылка есть?

Jusper Jusper

Я не оч понял из скриншота, как вообще работает стройка. У игрока будет как бы поле строительства?

split97 split97

в игру нужно добавить время песочные часы в инвентаре, пока бегаешь наберается усталость и ты очень тормозной мобильный враг просто убевает

split97 split97

в игру нужно добавить время песочные часы в инвентаре, пока бегаешь наберается усталость и ты очень тормозной мобильный враг просто убевает

ViktorJaguar ViktorJaguar

Почему я нигде не могу найти нормальный туториал, где покажут как экипировать предмет (например, меч) в определенную (выделенную под оружие) ячейку???

Логотип проекта Game Maker

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

Всем привет. Это будет мой первый урок, как на этом сайте, так и вообще, поэтому прошу оценить и, по возможности, указать на ошибки.
Итак, читатель, ты перешел к замечательному конструктору игр 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 - число, на которое делим.
Для того, чтобы материал укрепился, я прикреплю файл, в коде которого вы должны будете исправить ошибки. Вот и всё, встретимся в следующем уроке!
Ссылка

Смотрите также:


Комментарии

Здесь еще никто не оставил комментарий

Справка