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

Моя игра - мои правила (часть 4ая)

Оглавление

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

Картинка для привлечения внимания
Картинка для привлечения внимания

Движения

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

  1. Считать нколько юнит прошел и учитывать в следущий ход. В этом случае возникает вопрос, ок, юнит не дошел до клетки, а если его развернуть? Учитывать ли накопленный ход или считать движение с центра клетки? А как это показывать? Из-за неудобных вопросов этот вариант был выброшен. Выбрасывать не всегда легко, это потраченное время и усилия, но что поделать, у нас, у программистов, это часто происходит, в первые раз 10 больно, потом обидно, а потом легкое сожаление о потраченном времени.
  2. Разрешить юниту находиться между клетками. Это сложнее сделать, зато это визуально понятнее. Здесь на самом деле тоже не все так просто, например по-прежнему юниты принимают решение раз в ход, и лучник мог бы начать обстрел раньше, где-то в середине хода, но он продолжает движение прежде чем переключится на атаку. Но, наверное, такое поведение приемлимо. Понятно же что армии делают переходы и в эти моменты они могут пропусть удачный момент.

Население

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

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

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

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

Мораль

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

Анклавы

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

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

Производство

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

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

Много игроков

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

Много ботов

Уже работает, запускал огромную карту с 1500 ботами, притормаживало, но работало. Поставил ограничение не больше 150 на карту.

Юниты

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

Наука

Не сделано. Хотелось сделать версию науки, где выбирается направление, куда, а какое открытие будет сделано - неизвестно. И тут варианты: полный рендум, или рендум, но одинаковый для всех игроков на карте. Также города должны были стать ресурсами для науки. Ну и лаборатории, куда же без них. Ладно, быть может позже, надо же будет поддерживать интерес у игре, если вдруг на огонек зайдут люди.

Дипломатия

Не сделано. Простая версии дипломатии, предлагаешь мир - через ход получаешь ответ. Политические очки. Ну и какая-то система доверия, которое падает в моменты предательств. Также споры типа мафии, когда мы видим 2 противоположные точки зрения. Но не знаем наверняка, пока не свяжемся с кем-то из них.

Шпионаж

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

Взаимодействие с природой

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

Дороги/Инфраструктура

Не сделано. Бонус для экономики. Т.е.

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

Здания

Частитчно сделано. Можно построить города и поселки, территория рядом с ними немного более развитая чем оставшаяся, т.е. там выше скорость движения и больше ресурсов с этой территории можно собирать. По сути, какая-то инфраструктура там есть. Хорошо бы это как-то показывать на карте. Остались другие здания, типа лаборатория, фабрика, ферма, шахта, и возможно что-то еще, аэродром, например, но это так, на совсем будущее.

Карта/Генерация

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

Ветер

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

Хождение по воде

Пока не сделано. В планах. Когда появися большя вода, то это будет неплохим способом попасть в тыл врага. Ну и будет возможность сущестования островных государств. И флот! и подлодки! ну это я далеко вперед убежал..

Губернаторы/Генералы

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

Что сделано

Это была тяжелая неделя (ну две).

  • призраки - после гибели юнит преращается в призрака и еще ход воспаряет вверх. Тем самым обозначает место гибели и тип юнита. Возможно сделаю их полет более долгим, чтобы было эпично в моменты мясорубки
  • Возможность отменить постройку. Это больше важно когда назначил не ту постройку.
  • Разобрался со слоями. Провел строгу ревизию порядка отрисовки. Теперь все рисуется в нужном порядке, например юнит рисуется за деревом, но если его выделить - он выходит на передний план
  • Подсветка территории теперь не штриховка, а полувидимость с цветом игрока. И это хорошо. Более того положил подсветвку территории на более нижний уровень, таким образом деревья здания и юниты рисуются после, что значительно улучшило восприятние, почему я сразу так не сделал?
  • Теперь поддержка юнитов начинает в момент начала постройки, это заставит игроков строить там где построится быстрее.
  • Теперь, если не хватает ресурсов, сначала убирается строящийся объект, и только если их нет - юнит
  • Научился генерировать контуры юнитов. Теперь это используется для подсветки сторящихс яюнитов, а то они какие-то невидимые
  • Добавилась иконка у дектопной верии игры, версию для андроид без иконки было не сделать
  • Пауза музыки, когда теряется фокус. Это больше нужно для андроид, а то была жалоба что музыка играет после перехода в другое приложение. Но старт/стоп мне показался недостаточно хорошим решением, пришлось перерписать всю часть работы с музыкой. Ну а старую, привычным движением, удалил
  • Настройки игры при создании, теперь можно задать когда игра начнется, тем самым я убрал уже надоевшую необходимость ждать весь первый ход, когда кто-нибудь подключится. Никто не подключится, никто не знает как! Ну и предлагается назначить время начала игры.
видно силлуэты и призраков. К сожалению не видно как они взлетают, придется поверить. А силуэты, наверное, нужно всем юнитам рисовать, разной степени яркости, конечно.
видно силлуэты и призраков. К сожалению не видно как они взлетают, придется поверить. А силуэты, наверное, нужно всем юнитам рисовать, разной степени яркости, конечно.

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

  • показывать результирующие очки после игры (необязательно)
  • диагностику перегрузки сервера, ну или защиту от перегрузки (мало ли сколько игр будет создано)
  • решить проблему с блокировками у ботов
  • ввести ограничения по типам пользователей(фактически дешевый способ защитить сервер)
  • генерировать более красивую карту
  • НАПИСАТЬ СПРАВКУ

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

Android боль

Небольшой offtop. Несмотря на то что я пишу на java, которая "работает везде", оказывается что на андроиде мы имеет 7ую яву, и нормально писать под неё не получается. Что делать? использовать поректы типа retrolambda и proguard, чтобы более новая ява конвертировалсь в старую, для андроида. Подробностей не скажу(надеюсь кому надо разберутся), страшно вспоминать как я это все настраивал, но работает. правда иногда я случаино выхожу за пределы дозволенного и сборка ломается. В общем, быстрее бы спор оракла и гугла закончился и пустили ы новые явы на андроид, не переходить же на котлин? хотя мы же программисты, нам нужно постоянно учиться..

raic2020

Кроме работы и игрушки, появилось еще одно убийство времени, это ruaasian ai cup, ссылку не даю, все равно большинству это неинтересно. По сути ты управляешь ботами и уничтожаешь противника. Все это можно посмотреть у себя или на сайте, например https://russianaicup.ru/game/view/3200

можно нажать v, чтобы смотреть в 2d режиме. Я же пока написал стратегию, которая съедает все ресурсы, если противник стоит на месте. Теперь переписываю, чтобы логиrа была сложнее и можно было бы победить простого бота. А старую версию да... удаляю.

Пока так, после ночного обновления тестирующей системы, мои уже не съедают все ресурсы(зеленые клетки)
Пока так, после ночного обновления тестирующей системы, мои уже не съедают все ресурсы(зеленые клетки)