![]() |
|
Модераторы: Rickert |
![]()
|
|
| Septim |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 15.9.2011 Репутация: нет Всего: нет |
Доброго времени суток. Сейчас столкнулся с такой проблемой как контроль времени хода игрока на сервере.Тоесть,когда в комнате более 2 игроков я отсылаю клиентам команду принять решение готовности играть ."готов->не готов" и запускаю таймер на клиентах,но как теперь отследить это все на сервере,учитывая то ,что у меня динамическое создание комнат(тоесть,их создают сами игроки).Мне код вылаживать НЕ НУЖНО ! Мне главное понять суть как это правильно реализовать или еще более важнее,кто такое уже делал или знает как реализовывается.
Вот пример: 1)Сервер отсылает команду разрешающую ходить первому игроку и остальным,что ходит первый игрок.На клиентах запускаются таймеры инкрементирующие 60 сек до 0 2)Когда игрок не успел нажать "конец хода" до окончания отсчета таймера сервер должен четко через 60 сек,запросить результат или передать ход второму игроку. Как отследить это на сервере,нужна ли синхронизация.Я использую протокол TCP . |
|||
|
||||
| KaraKum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Можно и не контролировать и даже разрешения не получать. Каждый может совершать ход так, как если этот ход точно будет совершён - все ходы всё-равно проходят через сервер, поэтому проверка валидности хода может и должна совершаться на сервере при каждом ходе. И если происходит невозможное (ходит тот кто уже ходил или ходит до того как сходил кто-то другой, то это исключающее состояние - на сервере эта попытка должна быть либо отброшена (клиент может оказаться читером), либо отправлено клиенту соответствующее сообщение, в результате которого он сможет совершить ещё одну попытку сходить.
|
|||
|
||||
| Septim |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 15.9.2011 Репутация: нет Всего: нет |
Спасибо большое за ответ,но как можно контролировать клиента если на ход дается определенное количество времени.Тоесть,серверу нужно четко через 60 сек(если клиент забыл походить,отошел куда-нить) сделать передачу хода. Повторяю,у меня динамические комнаты.Комнаты храняться в контейнерах в памяти,и обрабатывается в цикле. Я думал....Это моя летучая мысля...Создать специальный таймер на сервере.И когда,начинается отсчет,просто добавить 60 сек к текущему значению таймера и записать этот результат.Когда сервер пребирает комнаты,он проверит это поле и сравнит с текущим значение,если боле 60 сек,передать ход.ИМХО есно,и естественно это неверно !!! |
|||
|
||||
| KaraKum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Да - именно так. И все клиенты также знают когда заканчивается возможность игрока совершить ход, а сервер просчитывает игровую логику за ход (если это реализовано на сервере, а не на клиенте) и, затем, отправляет всем клиентам новое состояние этой комнаты.
А комнаты, кстати, правильно реализованы - каждая сама-по-себе - тогда работа с каждой из них происходит в случайный момент и нагрузка на сервере растянута по времени, если думать о нагрузке... |
|||
|
||||
| Septim |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 15.9.2011 Репутация: нет Всего: нет |
Тоесть,Вы говорите,что моя идея с таймером верна? |
|||
|
||||
| KaraKum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Да, только предположение о завершении времени на ход можно делать одновременно и на клиенте. Идеальный вариант - это когда сервер выступает лишь посредником для реализации мультиплеера и в качестве валидатора против читерства.
|
|||
|
||||
| Septim |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 15.9.2011 Репутация: нет Всего: нет |
Огромнейшое спасибо.Буду пробовать |
|||
|
||||
![]()
|
| Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |