Spiiin's blog

1500 Archers on a 28.8 Kbps

http://www.gamasutra.com/view/feature/3094/1500_archers_on_a_288_network_.php Статья о реализации сетевой игры в Age of Empires. Алгоритм подходит для всех сетевых игр. Основная идея – чтобы не ждать сообщений от всех игроков каждый ход, нужно реагировать на них с задержкой в 2 условных тика. То есть ставим себе нулевой ход, всем соперникам минус первый, собираем все события текущего хода, записываем их во очередь событий второго хода и отправляем в сеть, в то же время собирая сообщения соперников и записывая их в очередь либо для следующего хода, либо для следующего через один, в зависимости от того, кто быстрее отработал текущий ход. Для быстрых клиентов за ход отрисовывается несколько кадров, для медленных – один. Если приходится долго стоять, ожидая одного или нескольких игроков, отстающих более чем на ход, остальные, пока ждут сообщений от отстающих, делают свой ход дольше, тогда для всех сообщений от быстрых игроков за этот ход необходимо ужать время в стандартный диапазон тика (их события произойдут “раньше”, чем от тех, кто лагает). При переходе на следующий ход все принятые сообщения из позапрошлого хода сортируются по времени их наступления и ход “проигрывается”, то есть сообщение выбирается из очереди только в ту фазу хода, когда оно должно произойти. Время тика где-то 50-200 миллисекунд. Получается довольно риалтаймово.