DuCats Games DuCats Games

Трудимся над Мечеломом)
Обновляем локации. Добавили кучу новой травы и растений + немного эффектиков + горы! Теперь пейзажи стали гораздо красивее.

РОМАН РОМАН

Работаю над роботом пауком ходящем по стенам.
ВК: https://vk.com/co_of_co

ASH2 ASH2

Тестируем электрическую сеть.
ВК: https://vk.com/snail_ninja

Jusper Jusper

Tartal, + если это конкретно имплант (то есть чуваку вырвали кусок, поставили механизированный), то искажение органической части должно быть больше. Глянь фотки после косметических операций, когда щи распухшие и раскрашенные пуще некуда...

Tartal Tartal

Jusper, с первыми двумя моментами я всё понял и принял.
А вот с третьим немного не разобрался. Ты имеешь ввиду, что область вокруг глаза-импланта должна быть искажена и повреждена намного сильнее?

Jusper Jusper

Tartal,

В целом мне очень нравится новый Кано, но с т.ч. восприятия и здравого промышленного дизайна механизированное ухо в форме уха это, я бы сказал так себе. Какой смысл повторять анатомическую форму...

...
Tartal Tartal

Потихоньку доделал концепт-портрет главного героя:

Jusper Jusper

Чем-то напомнило мне мотоциклы из Throne: Legacy, только обернутые в оформление харконеннов из Emperor: Battle for Dune.

Очень понравилась стилизация, местами то, как босс невозмутимо ходит по кругу, пока игрок по нему палит...

alexprey alexprey

Выглядит очень живенько, разве что не хватает звуков ко всему этому. Ракеты которыми разбрасывается босс, можно было бы сделать помассивнее, а то не сразу понял что это бомбы из ролика, думал босс разваливаться уже начал...

alexprey alexprey

kirsakshlil, вспомнил, тоже в свое время пытался с этой штукой баловаться когда только обзавелся планшетом. Но дело дальше простых утилит не пошло)

kirsakshlil kirsakshlil

alexprey, мобильная среда разработки, использующая Java.

alexprey alexprey

kirsakshlil, милота) APDE это что такое, что то не слышал про такое..

kirsakshlil kirsakshlil

alexprey, о, ахах, я тоже как-то начинал делать что-то в этом духе, только в APDE. Ручная отрисовка GUI - та еще муть :с . Правда, работать прямо в телефоне не очень удобно. Зато весело, хех. По факту не более чем баловался...

ASH2 ASH2

Jusper, спасибо. Нет, просто "типичный портрет").

Jusper Jusper

И вот мне казалось, что мы все побороли и сможем перейти на 19.3, но началась так называемая кок-магия.
Много нативных вещей отвалилось (в том числе и легаси управление. новое не взлетело). И даже когда мы худо...

...
Jusper Jusper

ASH2,

Рисовка хорошая, я уже говорил ранее.

ASH2 ASH2

Когда личное пространство имеет значение.
ВК: https://vk.com/snail_ninja

alexprey alexprey

Освещение хорошо смотрится)

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

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

Справка