137

Программист-рукожоп #2

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

Осторожно - много текста и туча картинок.

С чего все началось

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


Позже я для себя открыл программу MidletPascal, которая позволила некоторые навыки использовать в настоящем программировании игр для j2me телефонов. И тут понеслось..

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

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


Создавать для телефона было конечно интересно, но у меня особо горело желание создать что либо для компьютера. Так как я не был осведомлен в существовании удобных для новичка движков.. то закономерно пришел к тому что мне нужно создать свой "велосипед". Благодаря Delphi я познакомился с программированием графики на OpenGL и даже кое что создал

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

Убогая физика и отсутствие интерфейса, но на собственном движке. Был доволен как слон.


Случилось так что в одно время я заинтересовался созданием игры на мобильник чуть сложнее чем те угадайки которые я писал ранее.. и так вышло, что попробовать решил перенести майнкрафт в j2me под 2D графику (да, сейчас этих клонов пруд пруди, но мне казалось что я сделаю лучше, что возможно так и вышло)

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

Даже были попытки создать 3D движок, но дальше прототипа дело не зашло.


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

После десятков попыток создать что либо, у меня вроде вышло сделать копию той игры которую я делал в Delphi на OpenGL, с физикой и графикой стало получше, но ее я все равно не закончил - уровней было всего штук 5, а часть предметов в игре так и не заменил на нормальные вместо болванок.

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


Об онлайн игре

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

Примитивная стилистика и попытка начать писать сетевой код, который я тогда еще не умел, но очень хотел сделать. Благо к тому времени я мало-мальски познакомился с C# и начал осваивать сетевой код.

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

В итерации 3-4 (да я снова начал заново), вроде вышло чуть симпотичнее. Осилил создание аккаунтов и сохранения (до смешного - в отдельных файлах). Это было немногим лучше предыдущей версии и была даже попытка сделать инвентарь, но все же это был только эксперимент.

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

Десятки окон, сотни взаимодействий и клавиш, это все превращалось в непереносимую рутину, особенно со старым UI который отрисовывался вручную по координатам.

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

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


Итог. С технической точки зрения почти полностью разобрался с архитектурой кода многопользовательской игры, набил шишки на создании сервера, защиты и необходимости разбивать игру на кластеры обработки. Вроде как даже мало мальски научился моделировать и сохранять стилистику (но персонажи/мобы не получаются, персонажи фуфу - над этим еще работать и работать).


О веб

Да, с появлением Canvas и HTML5 стало любопытно о том что можно сделать в браузере. Особо ничего не сделал кроме опять же "экспериментального" движка - надстройки над канвас и пару простецких демок на нем. Если интересно, они до сих пор живы, как первая так и вторая.

О настоящем времени

На данный момент я провел еще множество маленьких экспериментов, в которых пытался разобраться в том как оптимизировать игру и упростить себе жизнь. Довольно классным нововведением в Unity конечно стал новый UI который значительно облегчил создание интерфейсов, но это означает что ту же онлайн игру придется переделывать целиком заново, а к такому я пока не готов.


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


The end

Как и писал в первом посте, все эти эксперименты привели к тому что я занимаюсь только экспериментами и на полноценные проекты давит эта вредная привычка.

Надеюсь вам было интересно мое повествование про жопорукого программиста.


P.S: В добавок к танкам

Начал я их уже как пару недель и занимаюсь на выходных, по возможности выкладываю ролики с тем что сделал на Youtube:

Первый ролик: https://youtu.be/UVl4udS7UmI

Второй ролик: https://youtu.be/H2kNM0W9c2A


И спасибо тем кто подписался, рад что вам интересно =)

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

1
Автор поста оценил этот комментарий
В одиночку всегда сложно что то делать, и более того, масштабные проекты не делаются в одиночку. Есть более простой и эффективный способ - найти нормального партнера , единомышленника, или даже группу людей, и все получится. Сам долго мучался в своем бизнес - начинании, но судьба свела с человеком, с которым все пошло как по маслу, и что интересно, у него тоже.

ТСу, проведи паралели между успехом групп людей, и одиночек в твоей сфере деятельности, и все станет ясно. Подобный опыт обычно оставляем при себе, но появилось желание помочь)))
раскрыть ветку (1)
6
Автор поста оценил этот комментарий

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

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

Привет, вопрос. Юнити. У меня уровень формируется из префабов (5 типов)-камень, дерево,пол, вода , мифрил. Карта уровня - 2х массив с кодом типа префаба. Однако построение даже небольшого уровня (60х60 блоков) занимает очень много времени. Есть идеи куда копать?

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

3600 созданий объектов по любому будут вызывать задержку, но все может быть просто в коде - если ты каждый раз загружаешь префаб с диска - то задержка будет огромной.

Стоит загрузить все префабы в отдельный массив заранее, при старте уровня и уже после формировать карту создавая копии объектов из этого массива.

Если и при этом задержка будет слишком ощутимой - думаю можно оформить это в "загрузку уровня"

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

Играли/видели/знаемъ. ИМХО,самый годный по тем временам порт на j2me,прям Террарией от него веет. Правда играл только в раннюю версию, но всё равно понравилось.

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

весьма рад)

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

Собственно, да, но даже авторитарная архитектура не решает всех проблем. Например, проблемы контроля input'a.(аимбот, грубо говоря)
+нет гарантии, что не заломают/утащат/положат сам сервер :)
+боты вредят не меньше, чем читеры.(фармеры обрушат экономику)
+необходимость разбирать репорты от игроков(что даже blizzard делает с сильной задержкой и переменным успехом с их то ресурсами)

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

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

В вк есть группа /galzuris

можно написать как в группу так и мне

9
Автор поста оценил этот комментарий
Вот уж не ожидал вновь вспомнить об этой игре. Когда-то Ваш порт майнкрафта был одним из лучших, спасибо :D И этот сайт на юкозе)
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

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

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

на скриншоте, где пацан стоит перед порталом - дизайн шкал и шрифт прямо как в Sword Art Online.

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

Верно, UI был частично навеян SAO но это временно было)

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

С MMO и сетевыми играми есть другая проблема - читеры. Да, ты можешь сделать работающий мультиплеер и один, но потом его взломают и вся твоя игра, которую разрабатывал годами умрет за некоторое не очень длительное время.
Без отдела ИБ вообще непонятно как вытащить мультиплеерный проект...разве что, у тебя мультиплеерная тактика вроде XCom - там есть варианты(всего два игрока, один из которых хост). Да и, в конце концов, игрок может просто покинуть игру с читером.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
понимаю, поэтому склоняюсь к авторитарной архитектуре сервера, не доверять игроку полностью, все считать на сервере
показать ответы