PDA

Просмотр полной версии : Механиз "поиска соперника" в многопользовательских играх


ZGG
09.03.2013, 20:36
Здравствуйте, уважаемые флешеры!

Как работает логика "поиска соперника" для игрока в многопользовательских играх?

Вот допустим, человек вошел в игру, нажал "Играть", ему высвечивается сообщение типа "Поиск соперника для Вас", собственно ему подбирается соперник и начинается игра.
Так вот, интересует как именно реализована логика такого "поиска"? Кто делал такие игры, поделитесь информацией.

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

caseyryan
09.03.2013, 20:51
Все просто. Сервер хранит данные обо всех подключенных клиентах. Это простой массив клиентов.
Клиент, в свою очередь, знает в какой комнате он находится.
Игрог нажимает поиск соперника, серверу приходит сигнал об этом. Он берет список клиентов, грубо говоря так:

private Client getRandomClient() {
return clients.get(Math.random() * clients.size());
}

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

-De-
09.03.2013, 22:20
Вообще если пишут, что идёт поиск соперника, то он таки идёт, т.е. не первого попавшегося берут. Всякие рейтинги/уровни учитывают. Время ожидания соперника тоже надо учитывать. Список ожидающих игры игроков делать.

caseyryan
09.03.2013, 23:04
Совсем не обязательно. Сервер может это выполнить за доли секунд, если клиентов не сотни тысяч. Не всему, что написано надо верить )
А вообще, я привел общую картину. Так то да, под конкретные нужды все надо затачивать

ZGG
10.03.2013, 00:26
caseyryan, спасибо