Найти тему
Я же программист

Ингридиенты для игры

Оглавление

Что было необходимо чтобы написать игру?

Если коротко то

  • инструмент/язык программирования
  • библиотеки
  • текстуры
  • модели
  • иконки
  • музыка - опционально
  • хранилище - git репозитарий
  • сервер
  • немного знаний

Язык программирования

Язык программирования java - свободный язык, за которыми стоят такие корпорации Oracle, Google, Amazon, RedHat, IBM. На джаве можно писать как серверные приложения, так и приложения для Android. Он довольно многословный и часто слегка отстает от современных тенденций, но он является проверенным и надежным инструментом для достижения цели. На самом деле главное, что у меня был довольно большой опыт с джавой на работе, все остальное ерунда, писать можно на чем угодно, будь это C++ или C-шарп, это возможно даже на javascript, так что любой человек может выбрать что ему по душе.

Библиотеки

Сильно зависит от выбранного языка/платформы. Для себя выбрал jMonkeyEngine, давно им баловался, но все равно пришлось много познавать методом проб и ошибок. для Си-Шарпа есть Юнити, для С++ - Unreal Engine. С одной стороны для 2д игры использование 3д движка перебор, с другой стороны я получаю какой-то UI, текстуры, возможность определения куда(какой элемент) пользователь тыкнул и прочие радости, ну и потом все мы планируем сделать свой GTA, не так ли?

Текстуры

https://pixabay.com/

https://freestocktextures.com/

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

Модели

https://opengameart.org/, если точнее https://opengameart.org/content/blender-models-for-freeciv-units

3d модели юнитов, под полностью свободной лицензией - красота. Если правильно поставить свет, и масштаб, и настройки рендеринга, то можно нагенерировать себе нужных юнитов. Да, надо разбираться с blender, немного почитать интернет, потом почитать статьи для конкретной версии, но все можно сделать. Бонусом имеем 3d юниты, некоторые из которых со скелетом - на будущее.

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

Иконки и музыка

https://icons8.com/

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

Хранилище кода

И тут вопрос, мы тут всерьез и надолго или просто проходим мимо? Правильно будет хранить где-то код, причем лучше в надежном месте. Я дома у себя на компьютере на шкафу создал несколько виртуалок, одна их которых посвящена gitlab, который сам поставил и настроил - не велика проблема, до тех пор когда что-то пойдет не так, а оно такое бывает, что после обновления все перестает работать. Наверное, лучший вариант использовать уже готовые внешние сервисы gitlab/github, для хранения кода. Если же код хранится у вас, лучше настроить backup. Я же завел еще одну виртуалку, которая периодически(ежедневно) копирует все необходимое куда-то во вне, например на яндекс диск. Итого, у меня всегда есть 3 копии - на рабочем компе, на компе на шкафу и еще где-то удалено. Да, я делаю вид что я тут всерьез.

Так же, кроме кода, тут можно хранить ресурсы. Нужно только учитывать, что, попав в git, ресурс там будет существовать пока хранится история, т. е. вечно. Поэтому туда лучше складывать или маленькие ресурсы или уже конечные варианты, чтобы не переполнить хранилище (мы же не один проект хотим иметь?).

У меня это выглядит так, Gitlab - это своего рода комбаин тут и код и задачи и , если надо, работа командой
У меня это выглядит так, Gitlab - это своего рода комбаин тут и код и задачи и , если надо, работа командой

Сервер

Тут много вариантов, запустить его у себя, в качестве временного решения это ок, если у вас белый айпи и свет не выключается часто. Но обычно в договорах провайдера это не одобряется, хотя и довольно редко ловят за это. Аренда другого сервера VPS, VDS, Dedicated server, я выбрал scaleway за дешевизну, но теперь там добавился НДС 20% для России. Из плюсов - много оперативки, много места, дешево. Из минусов - они французы, слабые процессоры на дешевых тарифах и низкая скорость до России, но реально высокая скорость в Европе. Видимо, чтобы было все хорошо, нужно иметь сервера во всех регионах, где мы хотим быть. Да дорого, да, пока и не нужно. Как вариант оптимизировать трафик, реже пересылая большие объемы данных. Из российских могу порекомендовать netangels (у них подороже, быстрее процессор, но как-то мало диска), а про то, что не понравилось я на всякий случай промолчу. Бывает так, что сервер (да и весь провайдер) находится в блеклисте, и это накладывает некоторые ограничения, например с поднятием своего почтового сервера. Хотя кто сейчас свои почтовые сервера поднимает?

Знания

Если мы говорим о гексогональной карте, то имеет смысл держать в закладках этот сайт

https://www.redblobgames.com/grids/hexagons/

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

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

Если брать сервер, то нужно знать базовые вещи, т. е. быть знакомым с линуксом, уметь запретить вход рутом и поставить fail2ban, java и прочие штуки.

Сеть... сеть можно сделать разными способами, например для пошаговой игры вполне может хватить Rest сервисов или Web-сокетов. Если быть более серьезным, то в javaесть netty, но можно и сделать это руками, я сделал на java nio, потому что так захотелось, ну и не хотелось тащить netty на android, тем более с этим были какие-то заморочки. Сейчас я бы не стал что-то писать сам, взял бы готовую библиотеку.

Баги

Чтобы как-то разбавить получившуюся скукатищу, предлагаю посмотреть текущие актуальные баги, 2 из них видны сразу на одном скриншоте.

Вот так вот неэкономно расходуются ресурсы.
Вот так вот неэкономно расходуются ресурсы.

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

1 - Юниты блокируют друг друга. Проблема серьезная и столкнулся я с ней только потому, что запретил 2м юнитам находиться в одной клетке. На самом деле я просто запретил им приближаться друг другу, закодив их как небольшие шарики, которые замирают, когда дальнейший путь заблокирован (это имеет смысл, если представить, что отряд занимает всю клетку).

2 - мелкая проблема с производством, когда юнит уже готов - он строится, но не всегда, понятно, что он не может построиться там, где уже стоит другой юнит, но есть и менее очевидная причина - не хватает людей. Логично же что солдаты берутся не из воздуха, а из клеточек, где строится юнит? Вот по какой-то причине отряд долго не строился, а ресурсы тратились, ладно они тратились, это мелочь, но то, что юнит готов на >100% надо исправлять.

более мелкий масштаб с выделенной картой победителя на эотй карте.
более мелкий масштаб с выделенной картой победителя на эотй карте.

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

Другое

В ближайшее время начнется: AI Cup — соревнование по программированию искусственного интеллекта. https://russianaicup.ru/

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