Путь от игрока до разработчика игр

Привет, читатель!


Этот длиннопост - результат интереса, проявленного к моему вчерашнему комментарию:

"В октябре прошлого года я решил поучиться программированию. Сейчас доделываю онлайн браузерную ММОРПГ-игру с элементами социальной сети. Так что по своему опыту могу сказать, что так получается, когда с головой погружаешься во что-то страшно для тебя интересное )" (#comment_99643287, #comment_99644807)


Благодаря этой ветке с комментами у меня появилось 11 подписчиков, посему небольшой цикл постов на тему разработки многопользовательских браузерных онлайн-игр объявляю открытым :)


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


Всё началось году в 2012-ом. Одногруппник познакомил меня с игрой Майнкрафт. Нет-нет, я не малолетний задрот, правда (мне ведь тогда уже было аж 22)! Я никогда не любил добывать ресурсы и охотиться на мертвяков, мне нравилось только строить монументальные постройки. Это ж почти как Лего, только ноги в безопасности. Одному играть стало скучно, начал играть по локалке с другом. Вдруг нам пришла идея: а не открыть ли собственный игровой сервер? Сутки ушли на то, чтобы разобраться с основными конфигами, закинуть пару плагинов, опубликовать рекламу в Контакте. И дело пошло.


Но держать игровой сервер на ноутбуке - не комильфо. Через пару недель решено было арендовать VDS (виртуальный выделенный сервер). Выбрал сервачок на немецком хостинге за ~3000 рублей в месяц. Из операционок можно было выбрать неизвестные мне тогда Debian, Ubuntu, CentOS, что-то ещё. Наугад ткнул в Debian, и пошло-поехало. Так начался мой путь линуксоида.


Через какое-то время мне надоело платить за хостинг, и я собрал свой собственный домашний сервер. Сконструировал убермашину: восемь AMD-шных ядер, 32 ГБ оперативки, SSD, охлаждение помощнее. Около 40 тысяч рублей ушло на этот электронно-вычислительный агрегат, который до сих пор верно мне служит, стоя в полуразобранном виде на холодильнике.

Путь от игрока до разработчика игр Linux, Web-программирование, MMO, Игры, Браузерные игры, Длиннопост, Саморазвитие, Программирование

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


На волне своего саморазвития я решил податься в веб-программирование, счёл это перспективной сферой. Как сейчас помню, 1-го октября 2016-го в полдень я сел за компьютер и... и ничего. Не знал, с чего начать. Скачал какие-то учебники, самоучители, но это было ужасно скучно, невыносимо нудно, все примеры были поразительно простыми, но в то же время было неясно, когда всё это может пригодиться. Три часа втыкал в эти примеры кода в духе "дважды два", в итоге плюнул на всё и решил: "К чёрту теорию, начну сразу с практики".

Путь от игрока до разработчика игр Linux, Web-программирование, MMO, Игры, Браузерные игры, Длиннопост, Саморазвитие, Программирование

Вот примерно так же я смахнул всё со стола. Ну ладно, может и не так, учебники были в электронном виде, да и компьютер для программирования мне мог пригодиться. Спокойно щёлкнул крестик в книжке и решил сделать чат.


Сам по себе, понятное дело, чат нафиг был не нужен, я лишь счёл его написание неплохим упражнением. С вёрсткой (HTML и CSS) я был знаком, синтаксис и возможности PHP и JS тоже были поверхностно известны. Крошечный опыт программирования у меня уже был благодаря написанию элементарных bash-скриптов.


За неделю сбацал чатик. Сейчас уже понимаю, насколько он был кривой, но тогда мне это казалось настоящим прорывом. Я понял тогда, что залог успеха - это постоянное гугление. Если чего-то не знаешь, то идёшь в Гугл и вбиваешь свой вопрос. Гугл хороший, Гугл всегда поможет. Как и Яндекс, кстати, кому что нравится.


После чата всё завертелось, и я решил сделать что-нибудь посложнее. Пришла идея реализовать поле боя с человечками, которое я встречал ранее в другой браузерке, ещё лет за 10 до этого. Человечки ходят по полю, разбитому на шестиугольники, бьют друг друга, ставят блоки, получают и наносят урон и либо помирают, либо получают опыт. Недели три я почти безвылазно сидел за компьютером, не спал сутками, строчил код, правил его, стирал и снова строчил. Иногда, уже ближе к рассвету, хотелось плакать. Но в итоге, когда всё заработало именно так, как я планировал, я хохотал, махал руками и кричал что-то в духе "ИТС ЭЛАЙВ!11"


Но не всё меня устраивало в результате. Проблема была в том, что при выполнении действий одним игроком нужно было рассылать эти действия всем остальным участникам сражения. Сначала я использовал для этого AJAX, то есть каждые пару секунд все игроки сами отправляли на сервер запрос: "ну что, есть какие-нибудь изменения на поле боя?", и получали ответ от сервера: "Нет, изменений нет" или "Да, изменения такие-то: ..." (под изменениями подразумевается расположение других игроков на поле, их здоровье и характеристики).

Путь от игрока до разработчика игр Linux, Web-программирование, MMO, Игры, Браузерные игры, Длиннопост, Саморазвитие, Программирование

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


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

Путь от игрока до разработчика игр Linux, Web-программирование, MMO, Игры, Браузерные игры, Длиннопост, Саморазвитие, Программирование

Пошло-поехало номер два. Увлёкся так, что помимо чата и поля боя добавил полтора десятка разных характеристик (сила-ловкость-крутизна и всё такое), магазин шмота, переодевалку, рынок, улучшения для шмоток, профессии, кузницу, школу магии с десятком боевых заклинаний, кланы, искусственный интеллект для ботов (ну и самих ботов, разумеется), плюс адаптивный интерфейс веб-страницы, причём без перезагрузки самой страницы... и конца-края этому не видно. Релиз ещё где-то далеко за горизонтом. Это как ремонт в хрущёвке: начать можно, а закончить нереально.


Спасибо тем, кто вчера подписывался на меня, кто заинтересовался этой темой, кто дочитал до конца этот длиннопост. Надеюсь, он сможет показать, как спонтанно принимаются определяющие жизнь решения, и вдохновить начинающих программистов на великие свершения. Если вам понравилось, я с удовольствием опубликую ещё парочку постов, где покажу саму игрушку, расскажу о некоторых сложностях процесса разработки, поведаю о нескольких интересных технологиях (те же вебсокеты, например), о которых могут не знать начинающие программисты, но которые поразительно просты и в то же время великолепны.

2
Автор поста оценил этот комментарий
Понравилось, не занимаюсь разработкой, программированием, но интересно читать, так что пиши. Подписался)
раскрыть ветку
1
Автор поста оценил этот комментарий
Понадобятся альфа, или бета тестеры - обращайся))
раскрыть ветку
1
Автор поста оценил этот комментарий
Дневник разработчика lineage )
Автор, пиши, интересно.
раскрыть ветку
Автор поста оценил этот комментарий

привет коллега,так я не понял,ты броузерку ваяешь?

раскрыть ветку
Автор поста оценил этот комментарий

ТС, где работаешь? откуда столько времени свободного?)

раскрыть ветку