Какой должна быть серверная часть игры?

Есть желание сделать игру типа "платформер" с возможностью сетевой игры. Игра должна представлять собой динамичную стрелялку. Все подключившиеся игроки распределяются по картам, на каждой карте по 10 - 20 игроков. Кроме игроков на карте будут однотипные объекты - препятствия.

Как выглядит клиентская часть:
1) модуль, отвечающий за отрисовку событий на карте;
2) модуль, отвечающий за обработку действий пользователя;
3) модуль для общения с серверной частью.

Каким предполагается протокол клиент-серверного взаимодействия:
1) клиент подключается к серверу;
2) клиент получает копию карты (со всеми объектами, игроками, их оружием и т.п.);
3) клиент сообщает о действиях пользователя;
4) клиент получает сообщение о действиях других пользователей и обновляет свою копию карты.

Требования к серверной части:
1) не должно быть заметных зависаний;
2) у каждого игрока должна быть актуальная информация о карте;
3) должна вестись достоверная статистика игрока (число побед / число поражений);
4) серверная часть должна быть максимально компактной (начать планируется с бесплатного / недорогого хостинга).

Какие я вижу подходы к решению задачи, их плюсы и минусы
а) Сервер на основе сокетов, осуществляющей пересылку сообщений между игроками без валидации. Выполняются требования: 1, 2, 4.
б) Сервер, осуществляющий проверку действий пользователя, опираясь на эталон карты, который хранит у себя (в ОЗУ, ПЗУ, БД). Если хранить в ОЗУ - его может не хватить на всех, если в ПЗУ или БД - дополнительное время.
Выполняются требования: 3.
в) Сервер на основе сокетов, осуществляющей пересылку сообщений между игроками. Валидация действий игроков осуществляется путем голосования (например, если какой-либо персонаж убит, каждый клиент генерирует соответствующее событие).
Выполняются требования: 1, 2, 3, 4.

Чего я боюсь:
1) игрокам будет неприятно играть в игру, которая притормаживает;
2) игроки начнут жульничать (использовать оружие, которого у них нет и т.п.).

Старался объяснить проблему как можно понятнее, и хоть получилось не очень, я надеюсь на адекватные советы. В чем я ошибаюсь, чего я не учел?
  • Вопрос задан
  • 1646 просмотров
Решения вопроса 1
tsarevfs
@tsarevfs
C++ developer
Вероятно вы переоцениваете вычислительную сложность модели. VDS за 300 рублей в месяц скорее всего покроет ваши потребности, если не делать на нем лишнего. Если игра вдруг начнет пользоваться популярностью, тогда можно будет вложиться в более дорогой сервер.
3 вариант может оказаться сложно реализуемым. Теоретически сделать это невозможно. Однако с некоторыми допущениями алгоритмы есть см. habrahabr.ru/post/222825/.
В принципе, можно забить на жульничество пока это не станет проблемой. Это увеличит шансы на то что игра увидит свет. guide.agilealliance.org/guide/simple-design.html
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
maaGames
@maaGames
Погроммирую программы
Я сейчас скажу страшную вещь, за которую завтра мне очень стыдно.
Скачай исходники какой-нибудь сетевой игры и попробуй в них покопаться. Например, движок первого квейка не только в открытом доступе, но и перелопачен вдоль и поперёк. Даже не так. Сейчас почти все движки в открытом доступе и бесплатно. И большинство озвученных проблем в них уже решены стандартным для них способом.
Ответ написан
@petorgrachov
Если игра вдруг начнет пользоваться популярностью, тогда можно будет вложиться в более дорогой сервер...пока что такой необходимости не вижу, по крайней мере так было когда я в азино 777 играл на реальные деньги.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы