Понимаю, что вопрос достаточно широкий, но может кто - то направит в нужную сторону или поделится опытом.
За пример игры берем допустим CoC.
Клиент - есть игровое поле, есть строения, есть юниты.
Игрок выпускает юнитов (совсем как в игре выше), юниты высаживаются на поле и бегут лупить строения.
У каждого юнита свои приоритеты, допустим толстые бьют первыми башни, тонкие бьют все подряд.
Понятно что ИИ должен руководить юнитами аж с сервера, так как игроки просто будут обманывать его.
Вопрос в реализации этого момента. Как происходит взаимодействие серверного ИИ и клиента, там же получается задержка будет между действиями?
Как происходит синхронизация игрового цикла с серверным ИИ, допустим я сделаю такую "симуляцию", но как происходит синхронизация банально по времени, юниты например могут прибежать раньше чем это произойдет на сервере?
Кроме того получается что я должен сделать приложение которое будет дублировать происходящее на клиенте, если игроков например 1000, на сервере должно быть запущено 1000 инстансов боев, не сильно ли это тяжело?
Прошу не бить костылями, в gamedev'е недавно, разработкой игр никогда не занимался. окунаюсь
tcp + udp
вот примерно то о чем речь: рассылка пакетов с обновлением состояний с сервера на клиент относительно каждого юнита
например, теоретически, пакет CLIENTPACKET_MOVE - отправляется с сервера на клиент, в нём содержится информация о перемещении какого-нибудь юнита с сервера на экран.
Сервер управляет всем, а не ваш клиент, ваш клиент только отображает то, что решил показать сервер. От вас зависит только куда пальцем нажмете и когда. И в этот момент отправляется SERVERPACKET_SPAWN - где передается серверу информация о юните, что вы заспавнили нового персонажа и такой-то точке, и сервер уже все просчитывает и отправляет вам состояние об этом юните в CLIENTPACKET_MOVE
запущено 1000 инстансов боев, не сильно ли это тяжело?
ну как сказать. для одной машины может и проблема, а для двух уже нет. тем более бои ограничены по времени.
Это чисто теоретическое предположение, для того, чтобы понять как и что там на самом деле - начните ревёрсить.
redlable47: Начинать в геймдеве с сетевых игр - очень плохая идея
Написано
Решения вопроса 1
Saboteur
@saboteur_kiev Куратор тега Разработка игр
software engineer
Инстансы "боев" - не корректное понятие. Что значит 1000 боев, там должно быть 1000 инстансов юнитов, у каждого юнита свое состояние - текущая активность (бежит, бьет, умирает), параметры и так далее.
Ии может руководить юнитами откуда угодно.
Это может быть часть серверного цикла (как в большинстве простых игр типа Diablo или MUD)
Это может быть отдельный процесс (как в Lineage2)
Это может быть отдельный процесс, запущенный на другом сервере.
Собственно архитектура и сложность ИИ так и продумывается, чтобы успевать с игровым циклом выполнять необходимые действия, и если юнитов слишком много - игра может подтормаживать или умышленно замедляться (как Eve online)
1000 боев имеется ввиду 1000 нападений, в СоС у каждого своя база, игрок может на нее напасть, получается такая мини игра, где игрок может выпустить на чужую баз толпу/армию/банду, он их просто выпускает где хочет, а потом смотрит за процессом, если надо где то еще выпустить юнитов в процессе выпускает где то еще.
Приблизительно так, 1000 боев - 1000 нападений игроков на чужую базу, я это имел ввиду. Я предполагал, что "инстанс боя" - это вот как раз механизм который просчитыает действие ИИ в зависимости от прилетающих юнитов.
Написано
Saboteur
@saboteur_kiev Куратор тега Разработка игр
Если игрок просто наблюдает, то там никакой ИИ не нужен. Расчет боя может выполняться за долю секунды, а визуализация боя может быть вообще случайной, из заранее созданного в клиенте набора.
В такой игре, как "ВГалактике", были бои с участием несколько миллионов юнитов с двух сторон, при этом рассчитывался индивидуальный удар от каждого юнита каждому. Занимало 2-3 секунды. Бои до миллиона юнитов - доли секунды.
А обычно индивидуальные удары не считают, считают в среднем, такое можно по сотне в секунду на одном ядре посчитать.
В общем все очень сильно зависит от игры, от онлайна, от требований к координации игроков. Недаром в активные игры типа quake/CS ограничение на карту 10-30 игроков не больше.