Реклама в Интернет       Все Кулички
Искусство создания игр
head

Сделать стартовой

Установка соединения

Сеансы создания и соединения

Игроки

Общие данные

Сообщения

Установка соединения

 

Для связи между двумя компьютерами необходим какой-нибудь протокол связи. Как и большинство игр, Game Maker предлагает четыре разных типа соединения: IPX, TCP/IP, Модемное и Последовательное (Serial) соединения. IPX соединение (или если быть более точным - протокол) работает почти полностью прозрачно. Он может использоваться для игры с другими людьми по одной локальной сети. Для работы требуется, чтобы протокол был установлен на Вашем компьютере. (Если он не работает, то загляните в документацию по Windows. Выберите элемент Сетевые Подключения в Панели Управления Windows и добавьте IPX протокол.) TCP/IP - межсетевой (Интернет) протокол. Он может использоваться для игры с другими игроками по Интернет; предполагается, что Вы знаете их IP адрес. По локальной (местной) сети Вы можете использовать его без указания адреса. Модемное подключение производится посредством модема. Вы должны произвести некоторые настройки модема (строка инициализации и номер телефона), чтобы использовать его. Наконец, при использовании последовательной линии (прямое соединение между компьютерами), Вы должны настроить большое количество параметров порта. Доступны четыре функции GML, которые могут быть использованы для инициализации данных соединений:

    mplay_init_ipx() инициализирует IPX подключение.
    mplay_init_tcpip(addr) инициализирует TCP/IP подключение. addr - строка, содержащая веб-адрес или IP адрес, например 'www.gameplay.com' или '123.123.123.12', возможно сопровождаемый номером порта (например ':12'). Указание адреса необходимо только в процессе сеанса соединения (смотрите ниже). В локальной сети никакие адреса не нужны.
    mplay_init_modem(initstr,phonenr) инициализирует модемное подключение. Где initstr - строка инициализации для модема (может быть пустой) и phonenr - строка, которая содержит номер телефона для дозвона (например '0201234567'). Номер телефона необходим только в момент сеанса подключения.
    mplay_init_serial(portno,baudrate,stopbits,parity,flow) инициализирует последовательное подключение. Где portno - номер порта (1-4), baudrate - скорость передачи данных в бодах, которая будет использовать (100-256К), stopbits - указывает число стопбитов (0 = 1 bit, 1 = 1.5 bit, 2 = 2 bits), parity - указывает чётность (0=none, 1=odd, 2=even, 3=mark) и flow - указывает на тип управления потоком данных (0=none, 1=xon/xoff, 2=rts, 3=dtr, 4=rts и dtr). Возвращает, если вызов успешный. Типичный вызов - mplay_init_serial(1,57600,0,0,4). Укажите 0 как первый параметр, чтобы открыть диалог пользователя, для изменения настроек.

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

    mplay_connect_status() возвращает состояние текущего подключения. 0 = нет подключения, 1 = IPX подключение, 2 = TCP/IP подключение, 3 = модемное подключение и 4 = последовательное подключение.

Окончание вызова подключения

    mplay_end() завершает текущее соединение.

При использовании TCP/IP подключения Вы можете захотеть сообщить человеку, что Вы хотите начать игру с указанием адреса IP своего компьютера. Вам поможет следующая функция:

    mplay_ipaddress() возвращает IP адрес Вашей машины (например '123.123.123.12') как строку. Вы можете, например, отобразить это где-нибудь на экране. Обратите внимание что эта функция медленная, так что не вызывайте её часто.

Сеансы создания и соединения

 

В тот момент, когда Вы подключаетесь к сети, в ней могут выполняться множество различных игр. Мы назовем их сеансами. Эти сеансы могут соответствовать различным играм или одной и той же игре. Игра в сети должна иметь свой уникальный идентификатор. К счастью, Game Maker предоставляет Вам такую возможность. Единственная вещь, которую Вы должны знать, заключается в том, что, когда Вы изменяете игровой идентификатор в окне опций, то эти идентификационные данные также изменяются. Таким образом Вы можете избежать ситуации постороннего подключения людей имеющих старую версию программы.

Если Вы хотите запустить новую многопользовательскую игру, Вы должны создать новый сеанс. Для этого Вы можете использовать следующую подпрограмму:

    mplay_session_create(sesname,playnumb,playername) создаёт новый сеанс для текущего подключения. Где sesname - строка, указывающая название сеанса, playnumb - номер, который указывает максимальное число играющих (используйте 0 для произвольного числа) и playname - Ваше имя как игрока. Возвращает, если успешна.

Один образец игры должен создать сеанс. Другой образец(цы) этой игры должны присоединиться к заданному сеансу. В действительности - это немного сложно. Вы сначала должны посмотреть, какие сеансы доступны и затем выбрать нужный для присоединения. Существуют три подпрограммы, необходимые для этого:

    mplay_session_find() ищет все доступные сеансы для подключения игроков и возвращает число найденных сеансов.
    mplay_session_name(numb) возвращает имя номера сеанса numb (0 - первый сеанс). Эта подпрограмма может быть вызвана, только после вызова предыдущей подпрограммы.
    mplay_session_join(numb,playername) создаёт Ваш сеанс присоединения, номер numb (0 - первый сеанс). playername - Ваше имя как игрока. Возвращает, если успешно.

Имеется ещё одна подпрограмма, которая может изменить режим сеанса. Должна быть вызвана перед созданием сеанса:

    mplay_session_mode(move) устанавливает, переместить ли сеанс с хостом на другой компьютер когда хост отключается. Параметр move должен быть истина или ложь (по умолчанию).

Чтобы проверить состояние текущего сеанса, Вы можете использовать следующую функцию:

    mplay_session_status() возвращает состояние текущего сеанса. 0 = нет сеанса, 1 = созданный сеанс, 2 = соединённый сеанс.

Игрок может остановить сеанс, используя следующую подпрограмму:

    mplay_session_end() заканчивает сеанс для данного игрока.

Игроки

 

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

    mplay_player_find() ищет всех игроков в текущем сеансе, и возвращает число найденных игроков.
    mplay_player_name(numb) возвращает имя игрока номера numb (0 - первый игрок, т.е. Вы сами). Эта подпрограмма может быть вызвана после вызова предыдущей подпрограммы.
    mplay_player_id(numb) возвращает уникальный идентификатор игрока номера numb (0 - первый игрок, т.е. Вы сами). Эта подпрограмма может вызываться только после вызова первой подпрограммы. Данный идентификатор используется при отправке и приёме сообщений к и от индивидуальных игроков.

Общие данные

 

Коммуникация общих данных - вероятно самый простой способ синхронизировать игру. Все коммуникации от Вас скрыты. Существует набор из 1000000 значений, которые являются общими для всего что содержится в игре (предпочтительно используйте только несколько первых, чтобы сохранить память). Каждый объект может устанавливать и читать значения. Game Maker проверяет чтобы каждый объект видел те же самые значения. Значения могут быть реальными или строковыми. Доступны только две подпрограммы:

    mplay_data_write(ind,val) записывает значение val (строку или реальное) в локацию ind (между 0 и 1000000).
    mplay_data_read(ind) возвращает значение в локацию ind (между 0 и 1000000). Первоначально все значения равны 0.

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

    mplay_data_mode(guar) устанавливает, использовать или нет гарантируемую передачу для общих данных. Где guar должен или быть истина (по умолчанию) или ложь.

Сообщения

 

Второй коммуникационный механизм который поддерживает Game Maker - это посылка и приём сообщений. Игрок может посылать сообщения одному или всем игрокам. Игроки могут видеть - прибыли ли сообщения и принимать соответствующие меры. Сообщения могут быть отправлены в гарантируемый режим, в котором Вы будете уверены, что они прибыли (но он может оказаться медленным) или в "негарантируемом" режиме, который является более быстрым.

Существуют следующие подпрограммы передачи сообщений:

    mplay_message_send(player,id,val) посылает сообщение указанному игроку player (либо на идентификатор, либо на имя; используйте 0, чтобы отправить сообщение всем игрокам). id - целочисленный идентификатор сообщения и val - значение (реальное или строка). Сообщение посылается в "негарантируемом" режиме.
    mplay_message_send_guaranteed(player,id,val) посылает сообщение указанному игроку player (либо идентификатор либо имя; используйте 0, чтобы послать сообщение всем игрокам). id - целочисленный идентификатор сообщения и val - значение (реальное или строка). Сообщение посылается в гарантируемом режиме.
    mplay_message_receive(player) принимает следующее сообщение из очереди сообщений, исходящих от указанного игрока player (идентификатор или имя). Используйте 0 для сообщений от любого игрока. Подпрограмма возвращает, если действительно имеется новое сообщение. При этом Вы можете использовать следующие подпрограммы, чтобы узнать его содержание:
    mplay_message_id() Возвращает идентификатор последнего полученного сообщения.
    mplay_message_value() Возвращает значение последнего полученного сообщения.
    mplay_message_player() Возвращает игрока, который послал последнее полученное сообщение.
    mplay_message_name() Возвращает имя игрока, который послал последнее полученное сообщение.
    mplay_message_count(player) возвращает количество сообщений, оставшихся в очереди от игрока player (используйте 0, чтобы сосчитать все сообщения).
    mplay_message_clear(player) удаляет все сообщение, оставшиеся в очереди от игрока player (используйте 0, чтобы удалить все сообщения).

Некоторые уточнения вышесказанного. Прежде всего, если Вы хотите послать сообщение только определённому игроку, Вам нужно знать его уникальный идентификатор. Как уже сообщалось ранее, Вы можете получить его, используя функцию mplay_player_id(). Данный идентификатор игрока, используется также при приёме сообщений от определённого игрока. В качестве альтернативы, Вы можете задать имя игроку, как строку. Если многие игроки имеют такое же имя, то сообщение получит только первый.

Во-вторых, Вы могли бы поинтересоваться, почему каждое сообщение имеет целочисленный идентификатор. Причина в том, что он помогает Вашему приложению посылать различные типы сообщений. Получатель может проверять тип сообщения используя идентификатор и принять соответствующие действия. (Поскольку прибытие сообщений не гарантируется, то посылка идентификатора и значения в разных сообщениях могут вызвать серьёзные проблемы).

Rambler's Top100

Requier inc. 2007