Программист-рукожоп #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
И спасибо тем кто подписался, рад что вам интересно =)
Лига Разработчиков Видеоигр
8.5K поста23.1K подписчик
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"