Здравствуйте, уважаемые пользователи gcup.ru. Из "научного" интереса я перечитал множество уроков по созданию "первой игры" на GM и всего в этом духе. Что могу сказать? Ну, всё довольно однообразно - hit the ball, платформеры и всё в этом духе... Немного устав читать подобные уроки, я решил сделать кое-что "необычное", а именно написать серию мини-уроков по созданию кликера на GM. И так, поехали. При создании какого бы то ни было кликера для начала нужно продумать идею. Как ни странно, первой идеей, пришедшей мне в голову, стал... симулятор наркоторговца.
Поэтому, делать будем, опираясь именно от этой идеи. Для начала, создадим объект obj_var, создадим событие create и пропишем следующее:
Код
global.money=0;//Деньги, которые даются при старте. global.ing=0;//Ингредиенты для изготовления амфетамина (во все тяжкие, саламалексус). global.met=0;//Непосредственно сам амфетамин. global.lvl=1;//Количество денег, которое приносит один клик и, параллельно, множитель для цен на некоторые улучшения. //Приставка global. означает то, что переменная глобальная - т.е. не привязана к отдельному объекту.
Хорошо, с пропиской переменных мы закончили. Теперь создадим шрифт и назовем его f_game. Диапазон символов - все (all) т.е. от - до 255. Далее, переходим в draw пока что единственного объекта в игре и пишем:
Код
draw_set_font(f_game);//Выбираем шрифт.. draw_text(x,y,'Деньги: '+string(global.money));//Прописываем количество денег в координатах x и y. draw_text(x,y+24,'Ингредиенты: '+string(global.ing));//Прописываем количество ингредиентов в тех же координатах, но на 24 пикселя ниже, чем деньги. draw_text(x,y+48,'Метамфетамин: '+string(global.met));//Прописываем количество метамфетамина в тех же координатах, но на 24 пикселя ниже, чем ингредиенты (на 48 ниже, чем деньги).
Далее создадим объект obj_work... Создадим ему спрайт, ну, spr_work и присвоим ему просто надпись "работать" (можно сделать в виде кнопочки, да и вообще как хотите, дизайн уже за вами). Создадим событие Left Pressed и просто пропишем:
Код
global.money+=global.lvl;//Думаю, объяснять не требуется. При нажатии на кнопку увеличиваем количество денег на текущий уровень.
Создаём объект obj_skupka (очень банальное название, ну да ладно, просто пишу урок по своим же наработкам), спрайт - spr_skupka - либо просто кнопка с надписью "скупка ингредиентов", либо на ваше усмотрение (дальше вы поняли, думаю, про спрайты остальных кнопок объяснять не буду, названия даём такие, как и у объектов, только spr_ вместо obj_ и пропишем во всё тоже Left Pressed:
Код
if global.money>=50//Если количество денег 50 или больше... {global.money-=50;//Количество денег уменьшается на 50... global.ing+=1;}//А количество ингредиентов увеличивается на 1. else//В противном случае... {show_message('Недостаточно денег!')}//Выводим сообщением о том, что денег недостаточно.
Закончили и с этим. Создаём obj_varit. В ставшее стандартным событие пишем:
Код
if global.ing>=1//Если есть ингредиенты... {global.ing-=1;//Уменьшаем их кол-во на 1... global.met+=1};//А кол-во метамфетамина увеличиваем на 1. else//В противном случае... {show_message('У Вас нет ингредиентов!')};//Сообщаем игроку, что варить не из чего.
Теперь самое сложное (нет). Создаем объект obj_prod (я не не могу в английский, просто так привычнее) и рисуем спрайт кнопки продажи. В создание пропишем:
Код
timer=false;//Это переменная отвечает за вывод таймера до продажи (продажа будет занимать 10 секунд).
Создаем Left Pressed и пишем:
Код
if global.met>=1 and alarm[0]<=1 then//Если есть метамфетамин и ни одного грамма не продается... {alarm[0]=room_speed*10;//Выставляем значение аларма на 10 секунд... timer=true//Включаем переменную таймера... timervar=10//Количество секунд до конца продажи в переменной timervar. alarm[1]=room_speed}//Каждую секунду переменная до конца продажи уменьшается на 1. else show_message('Вам нечего продавать или процесс продажи предыдущего грамма не был завершён!');//Если метамфетамина нет или что-либо продаётся, сообщаем об этом игроку.
Создаем Alarm 0 и пишем:
Код
global.met-=1;//Через 10 секунд кол-во метамфетамина уменьшаем на 1. global.money+=70;//Кол-во денег увеличиваем на 70. timer=false//отключаем таймер.
Создаем Alarm 1, следующий код:
Код
alarm[1]=room_speed//Через секунду действие повторится. timervar-=1//Значение этой переменной будет рисоваться, так что уменьшаем его на единицу.
Идем в рисование. Пишем:
Код
draw_sprite(sprite_index,-1,x,y);//Прорисовываем сам спрайт, чтобы его было видно и рисование текста на заменяло рисование спрайта (можно заменить на draw_sprite_ext). if timer=true then//Если таймер включен... {draw_set_font(f_game);//Выбираем шрифт... draw_text(256,432,'Продажа через:'+string(timervar));}//Рисуем в координатах (по х и у соответственно) 256 и 432 отсчёт секунд до продажи.
Далее - просто создаём комнату, расставляем и готово! У меня получилось что-то в этом духе, но своим дизайном распоряжаетесь вы (зелёный текст - тайл):
Можете начинать играть. Во втором уроке я опишу, как сделать улучшение и автоматизацию кнопки "работать". В третьем - ачивки и продажу новых веществ.
Всем спасибо за прочтение. До следующих уроков!
И так, вот и второй урок. Думаю, начнём сразу, не распинаясь и без всяких вступлений. Поехали. Для начала, сделаем автоматизацию. Делать всё, можно, конечно и в одном объекте, но т.к. экономия ресурсов незначительна, а реализация немного труднее, будем делать всё через 2 (если кому интересно, могу описать, как сделать всё через один объект).
Идём в наш любимый obj_work и создаём событие Right Pressed. Пишем следующее:
Код
sm=show_menu('Нанять работника (Автоматизация) | Улучшение',0)//При нажатии правой кнопки мыши, появляется всплывающее меню с возможность выбора из двух пунктов (0 - первый пункт, следовательно, 1 - второй).
if sm=0 then //Если выбран первый пункт... {if global.money>=1000//Если денег больше 1000 или 1000... {global.money-=1000;//Вычитаем из них 1000... instance_change(obj_work_auto,1);}//obj_work превращаем в obj_work_auto... else show_message('Недостаточно денег! Нанять работника стоит 1000$.')};//А если денег не хватает, то сообщаем об этом игроку.
if sm=1 then//Если выбран первый пункт... {if global.money>=global.lvl*200*global.lvl//И денег больше, чем (указанная формула, простите, не знаю, как это нормально описать, да вы и сами всё поймёте)... {global.money-=global.lvl*200*global.lvl//Отнимаем необходимое количество денег... global.lvl+=1}//И увеличиваем global.lvl на 1. else show_message('Недостаточно денег! Увеличение заработка стоит '+string(global.lvl*200*global.lvl)+'$.')};//Если денег не хватает, сообщаем игроку об этом.
Отлично. Теперь приступим к созданию самого obj_work_auto. Спрайт можно оставить тот же, что и у obj_work, но это на ваше усмотрение. В событие Create вписываем:
Код
global.money+=global.lvl;//Прибавляем к деньгам столько, сколько нужно (принцип вы уже поняли). alarm[0]=room_speed;//Событие Alarm 0 произойдет через одну секунду.
Далее создаём Alarm 0 и прописываем туда ровно тоже самое. Создаём событие Left Pressed и пишем:
Код
global.money+=global.lvl;//Ну вы поняли.
Далее, создаём событие Right Released (не pressed - во избежание бага с повторным открытием меню при "перевоплощении"). Пишем:
Код
sm=show_menu('Улучшение',0)//Выводим меню с одним пунктом.
if sm=0 then//Если выбран этот пункт... {if global.money>=global.lvl*200*global.lvl//Если количество денег соответствует формуле... {global.money-=global.lvl*200*global.lvl//Снимаем нужное количество денег... global.lvl+=1}//И увеличиваем уровень. else show_message('Недостаточно денег! Увеличение заработка стоит '+string(200*global.lvl)+'$.')};//Если денег не хватает, сообщаем игроку об этом.
В принципе, обещанное я описал, так что урок можно считать законченным. К следующему уроку я расскажу, как реализовать систему "поощрений" - ранги и магазин... Магазин чего? Предлагайте свои идеи на то, что можно будет покупать в магазине, а как это реализовать - в следующем уроке я расскажу. Если со всем этим бредом я вам хоть чем-то помог, можете ставить плюсики в качестве "спасибо", но, конечно, я никого не заставляю. Всем спасибо за прочтение, ждите следующего урока и удачи вам!
Сообщение отредактировал LastSeptember - Понедельник, 06 Августа 2018, 19:21
+ текстовый вариант, не нужно смотреть 20 минут видео, и слушать звук записанный на микрофон ценной в 100р. с еканиями и "водой" + кликер самое то для начала изучения, не требует ковыряния в 3Д редакторах, что бы ваять красивые фигуры. Да и и кликер это детская математика обвернутая в код программы. - картинок бы подкинуть для полноты восприятия. Главное не бросайте начатое, да кликер увы не в почете, ведь все они по логике одинаковы, только картинки меняют и текст, потому данные уроки могут не стать популярными и нужными, но толковый и полный курс о созданию кликера хотелось бы видеть.
Atrek, спасибо за отзыв! Думаю, завтра добавлю скриншотов в те места, где они покажутся необходимым. Как только наберется отзывов 5-6, напишу продолжение, если вы посчитаете это нужным. Код для следующей статьи, как ни странно, у меня уже полностью готов.
К слову, если не секрет, чего такого должно быть в кликере, чтобы он заставил вас "застрять в себе" на часок-другой?
чего такого должно быть в кликере, чтобы он заставил вас "застрять в себе" на часок-другой?
Ничего, на то это и кликер. Ты просто кликаешь и ничего больше не происходит. Возьми что нибуть по интереснее, какой нибуть TDS c интересным ИИ, или платформер.
P.s Разве уроки не нужно выкладывать в специальный раздел?
P.s Разве уроки не нужно выкладывать в специальный раздел?
Всё на месте:
ЦитатаОписание раздела ()
Ничего, на то это и кликер. Ты просто кликаешь и ничего больше не происходит.
А вот здесь ты, на мой взгляд, неправ. Из-за того, что человеку "подсознательно" нравится наблюдать за ростом тех или иных чисел, кликеры затягивают получше многих других жанров. Хорошие кликеры. Только вот для "затягивания" должен быть какой-то стимул кликать. Вот ты кликаешь - тебе дают монетку. Накликал до 100 монеток - купил апгрейд и теперь за клик тебе дают 2 монетки вместо одной. Накликал до 400 - купил ещё один апгрейд, теперь тебе дают 3 монетки. Накликал до 1000, теперь тебе можно не кликать, потому что монетки зарабатываются автоматически. Но монетки должны копиться для чего-то, что может использоваться в процессе дальнейшей игры (если не с пользой для дальнейшего накопления, то хотя бы как декорация - сделать магазин фонов, эффектов или чего-то ещё).
Мне интересно, что было бы лучшим стимулом продолжать играть для пользователей GCup.
Сообщение отредактировал LastSeptember - Воскресенье, 05 Августа 2018, 23:48
LastSeptember, По поводу играть. Для меня любой кликер уже интересен, если в нем, игрок получает звания/ранги. На примере вашего кликера это может выглядеть так. Начинаем игру с 0 рангом(Барыга) выполняя действия, допустим продав запрещенных веществ на сумму 1000, получаем ранг 1(Старший барыга). Так же, ранг служит допуском к благам игры, которые помогаю ее проходить быстрее, да в кликере должна быть главная цель, стать главой города/поставщиком мета по всей планете и так далее. То есть ранг выступает мерилом игрового успеха + дает игроку наглядный пример, что он продвигается а не только увеличивает число кликов на по экрану которые конвертируються в игровую валюту. Сам такие клкери отношу в категорию кликер-рпг. Еще одним не мало важным пунктом являться наличие графической части, те же ранги, выведены не только виде текста, а еще и графически Дурик - Шеф - Подхалим - Примеры таких рпг кликеров это стимулятор бомжа/гаишника/президента.
Сообщение отредактировал Atrek - Понедельник, 06 Августа 2018, 09:49
Тханкс, решил вспомнить гамак и его логику, самое то для вхождения. Жду продолжения.
Спасибо, сейчас чай заварю и будет продолжение)
И так, вот и второй урок. Думаю, начнём сразу, не распинаясь и без всяких вступлений. Поехали. Для начала, сделаем автоматизацию. Делать всё, можно, конечно и в одном объекте, но т.к. экономия ресурсов незначительна, а реализация немного труднее, будем делать всё через 2 (если кому интересно, могу описать, как сделать всё через один объект).
Идём в наш любимый obj_work и создаём событие Right Pressed. Пишем следующее:
Код
sm=show_menu('Нанять работника (Автоматизация) | Улучшение',0)//При нажатии правой кнопки мыши, появляется всплывающее меню с возможность выбора из двух пунктов (0 - первый пункт, следовательно, 1 - второй).
if sm=0 then //Если выбран первый пункт... {if global.money>=1000//Если денег больше 1000 или 1000... {global.money-=1000;//Вычитаем из них 1000... instance_change(obj_work_auto,1);}//obj_work превращаем в obj_work_auto... else show_message('Недостаточно денег! Нанять работника стоит 1000$.')};//А если денег не хватает, то сообщаем об этом игроку.
if sm=1 then//Если выбран первый пункт... {if global.money>=global.lvl*200*global.lvl//И денег больше, чем (указанная формула, простите, не знаю, как это нормально описать, да вы и сами всё поймёте)... {global.money-=global.lvl*200*global.lvl//Отнимаем необходимое количество денег... global.lvl+=1}//И увеличиваем global.lvl на 1. else show_message('Недостаточно денег! Увеличение заработка стоит '+string(global.lvl*200*global.lvl)+'$.')};//Если денег не хватает, сообщаем игроку об этом.
Отлично. Теперь приступим к созданию самого obj_work_auto. Спрайт можно оставить тот же, что и у obj_work, но это на ваше усмотрение. В событие Create вписываем:
Код
global.money+=global.lvl;//Прибавляем к деньгам столько, сколько нужно (принцип вы уже поняли). alarm[0]=room_speed;//Событие Alarm 0 произойдет через одну секунду.
Далее создаём Alarm 0 и прописываем туда ровно тоже самое. Создаём событие Left Pressed и пишем:
Код
global.money+=global.lvl;//Ну вы поняли.
Далее, создаём событие Right Released (не pressed - во избежание бага с повторным открытием меню при "перевоплощении"). Пишем:
Код
sm=show_menu('Улучшение',0)//Выводим меню с одним пунктом.
if sm=0 then//Если выбран этот пункт... {if global.money>=global.lvl*200*global.lvl//Если количество денег соответствует формуле... {global.money-=global.lvl*200*global.lvl//Снимаем нужное количество денег... global.lvl+=1}//И увеличиваем уровень. else show_message('Недостаточно денег! Увеличение заработка стоит '+string(200*global.lvl)+'$.')};//Если денег не хватает, сообщаем игроку об этом.
В принципе, обещанное я описал, так что урок можно считать законченным. К следующему уроку я расскажу, как реализовать систему "поощрений" - ранги и магазин... Магазин чего? Предлагайте свои идеи на то, что можно будет покупать в магазине, а как это реализовать - в следующем уроке я расскажу. Если со всем этим бредом я вам хоть чем-то помог, можете ставить плюсики в качестве "спасибо", но, конечно, я никого не заставляю. Всем спасибо за прочтение, ждите следующего урока и удачи вам!
Сообщение отредактировал LastSeptember - Понедельник, 06 Августа 2018, 19:21
хах, заставил вспомнить свою старую поделку "Симулятор черта" с бестолковым балансом и самодельной графикой=)) вот html5 версия на itch.io, может какой идеей вдохновишься=) Более мощный компьютер глючит быстрее и точнее.
хах, заставил вспомнить свою старую поделку "Симулятор черта" с бестолковым балансом и самодельной графикой=)) вот html5 версия на itch.io, может какой идеей вдохновишься=)
Я потерял час жизни на этом адском кликере, требую вернуть обратно! Вообще у кликеров, чтобы подольше задержать пользователя,необходимо сделать конечную цель. В "адском кликере" достаточно ввести не уровень грешника, а глубину ада. например 500. Каждые допустим 50 уровней, менять фон на "более адский". И люди будут сидеть задротить)). Сборные артефакты усилители, порталы проводящие на другой уровень ада (донат). Малые армаггедоны, а также необходимо гораздо больше средств мучений. Пяти штук мало.
Цитата
Предлагайте свои идеи на то, что можно будет покупать в магазине, а как это реализовать - в следующем уроке я расскажу.
2-3-4 компонентные вещества, карта мира которую надо захватить (распространить) это по сути конечная цель для игрока. Покупать корабли, самолеты, фуры, подводные лодки для распространения. А также необходим личный дом куда покупать различную роскошь, телевизоры, машины, яхты, бассейны, сами дома менять. Вообще игра про вещества во многих странах приравнивается к пропаганде веществ, что наказуемо.
Сам думал над этим, знать бы ещё компоненты метамфетамина, так бы и сделал)
ЦитатаFerrumel ()
карта мира которую надо захватить (распространить) это по сути конечная цель для игрока.
Подумал сейчас - и, в, принципе, это не так уж и сложно сделать. Только другое дело, что сложнее (намного сложнее) здесь с графическими ресурсами, ибо текстом это организовывать как-то странно) В любом случае, за идею спасибо, себе всё таки добавлю)
ЦитатаFerrumel ()
А также необходим личный дом куда покупать различную роскошь, телевизоры, машины, яхты, бассейны, сами дома менять.
Опять же, легкая реализация, но необходимость графических ресурсов и довольно большого количества объектов/строк кода/всего сразу.
ЦитатаFerrumel ()
Покупать корабли, самолеты, фуры, подводные лодки для распространения.
А это идея, спасибо) В общем, спасибо за идеи, но статья ориентирована на новичков, а реализацию некоторого из перечисленного, думаю, новички не поймут). Если ты не против, некоторые твои идеи заберу вот сюда).
В "адском кликере" достаточно ввести не уровень грешника, а глубину ада. например 500. Каждые допустим 50 уровней, менять фон на "более адский". И люди будут сидеть задротить)). Сборные артефакты усилители, порталы проводящие на другой уровень ада (донат). Малые армаггедоны, а также необходимо гораздо больше средств мучений. Пяти штук мало.
Это поделка за 2 дня(включая рисование), что бы попробовать "конструктор", так что особо не заморачивался=) З.Ы там у каждого средства есть по 4(или 5, не помню уже) уровня апгрейда за "зубы"(выпадают рандомно от смерти, собирать наводя мышку), каждый апгрейд меняет визуалку... ди множит показатели при следующих прокачках. Более мощный компьютер глючит быстрее и точнее.
И так, в голову стукнула идея написать завтра третий и заключительный урок. Что бы вы хотели в нем увидеть?
Добавлено (14 Августа 2018, 20:38) --------------------------------------------- Эхххх, никто так и не ответил Самому, видимо, придется идеи придумывать, хотя и смысла не вижу, ибо это никому неинтересно.
Видимо сами кликеры не интересны))) Я сам только скачал ГМ 1 со стима пока сам не знаю , что мне интересно. Главное что там можно сделать Не бывает потерянного времени... Ведь всему свое время...