Qt создать игровой хост - PullRequest
0 голосов
/ 17 февраля 2010

Я создаю 2D-игру в Qt, и я хочу позволить другим подключаться к играм, размещенным на хосте. Могу ли я просто сделать «сервер» в игре и позволить другим подключаться к нему?

Ответы [ 3 ]

1 голос
/ 17 февраля 2010

Как правило, для этого нужно несколько вещей.

А именно, сервер каталогов. Возможно, все подключаются к другим игрокам, которые размещают игры для игры, но вам нужно запустить каталог для игр, которые будут перечислены в списке, чтобы люди могли подключиться.

Либо так, либо вам нужно запустить сервер и разместить их там. Выбор за вами, первый вариант, вероятно, самый простой для вас.

1 голос
/ 17 февраля 2010

Если это всего лишь небольшой проект, и вы не собираетесь массово распространять его через Интернет (это не похоже на вас), то вы можете кодировать простой сервер сокетов.Вам нужно будет изменить существующий игровой код, чтобы отправлять «ходы» в виде сообщения на сервер.Вероятно, будет проще, если вы создадите простой сетевой протокол для передачи данных перемещения (если вы амбициозны, вы можете попробовать сериализацию).

Пример псевдокода для простой игры в крестики-нолики:

move1 = "Move X:1:1"  //placed an 'X' in square at row 1, column 1
move2 = "Move O:1:2"  //placed an 'O' in square at row 1, column 2

reset = "Reset"       //clear the board for a new game

...etc...

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

Между тем, вернувшись в код сервера, вам нужно будет прослушивать сообщения о перемещении, отправленные клиентами.Когда вы получаете сообщение о перемещении, вам необходимо передать сообщение всем другим клиентам, чтобы на них можно было обновлять доски.Я бы порекомендовал перенести код сервера за пределы игрового кода;это позволит вам настроить выделенный сервер, который будет обрабатывать все сокеты, и тогда каждый, кто хочет играть, просто подключит своего клиента к серверу.

Основная идея заключается в том, что ваш клиент должен передавать деталио том, что его проигрыватель делает с сервером, а также прослушивает данные с сервера, чтобы обновить подробности о других проигрывателях.

Вы можете найти хорошее обсуждение алгоритмов высокого уровняПростая игра клиент-сервер и в этом вопросе: Алгоритм клиент-серверных игр

Надеюсь, этого достаточно, чтобы начать!Я использовал этот подход для некоторых простых игр (тетрис, понг и т. Д.), Использующих C ++ / Qt, и они работали довольно хорошо.

PS.Не позволяйте идее написать свой собственный сервер напугать вас.Это звучит устрашающе, но на самом деле это совсем не очень сложно (~ 100 строк кода или меньше) и отличный опыт обучения.

0 голосов
/ 17 февраля 2010

На вашем месте я бы выделил сервер, но в комплекте с "клиентом". Верьте мне или нет, многие игры используют подобный подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...