2010-02-17 1 views
0

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

ответ

1

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

псевдо-код примера для простой игры Tic-Tac-Toe:

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... 

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

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

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

Вы можете найти хорошее обсуждение алгоритмов высокого уровня простой игры клиент-сервер в этом вопросе, а также: Algorithm for Client-Server Games

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

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

+0

Большое вам спасибо. Эта информация очень помогает. Я написал код сокета до, но не слишком много кода сервера, это будет отличный опыт. – BlakeWilliams

0

Если бы я был вами, я бы сделал сервер отделенным от, но в комплекте с «клиентом». Поверьте мне или нет, многие игры там используют подобный подход.

1

Как правило, нужно немного вещей, чтобы получить что-то подобное.

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

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

+0

+1 Настоятельно рекомендуется публично доступный сервер каталогов. – shinkou

+0

Mine просто будет, и несколько друзей играют в основном lan и некоторые через Интернет, просто вводя IP. – BlakeWilliams