Создание многопользовательской(online) игры на Game Maker. (часть 3) - Game Maker - Конструкторы игр, системы разработки игр
Навигация по сайту
Сайт:

Дополнительно:

Файловый архив:

Каталог статей:

Форум:


Категории раздела
Game Maker [27]
Flash [3]
FPS Creator X9, X10 [1]
Scirra Construct [14]
Multimedia Fusion [0]
001 Game Maker, Map 001 [0]
3D RAD [16]
3D Game Studio [1]
Silent Walk FPS Creator [0]
Blender (Блендер) [1]
Game Editor [0]
Остальное [1]
Все остальное, что не попадает ни под одну категорию.

Мини-Опрос
Какие языки программирования вы знаете?
Всего ответов: 897

Партнеры сайта
....

 Главная » Статьи » Конструкторы игр, системы разработки игр » Game Maker » Создание многопользовательской(online) игры на Game Maker. (часть 3)

Создание многопользовательской(online) игры на Game Maker. (часть 3)

19:14
3. Основы. Основы использования TCP/IP набора протоколов.

Из предыдущих частей мы узнали основы создания многопользовательской игры, типы и виды подключений, познакомились с набором команд Game Maker. Теперь пришло время поработать с кодом и понять принципы написания алгоритмов. Данная часть статьи будет разделена на следующие категории: установка соединения, получение информации о игроках, отправка данных, получение данных, закрытие подключения.

1. Установка соединения.
Для начала нам нужно установить соединение между игроками и сервером. После создания соединения нужно создать сессию(игроку или серверу), после чего остальные должны подключиться к ней. Мы не будем разбирать основы создания многопользовательских игр вида клиент-клиент, т.к. как уже говорилось ранее, это не оптимизированный вариант для игровых клиентов, пусть рассылкой пакетов данных занимается сервер. На словах все просто, но и на практике не сложнее:

1.1 Создаем подключение и сессию для сервера:

Код

if (mplay_init_tcpip('127.0.0.1')) { // открываем подключение по адресу '127.0.0.1'. Иными словами мы создаем подключение, доступное только для нашего ПК.

  if (mplay_session_create('My Srver Name', 10, 'Constructor')) { // создаем сессию с именем 'My Srver Name'. Максимальное количество игроков устанавливаем равным 10. Указываем свой ник в игре: 'Constructor'.
   
  mplay_data_mode(false); // отказываемся от проверки доставки сообщений.  
   
  } else {

  show_message('Не удалось создать сессию!'); // помните, нужно всегда сообщать об ошибках, т.к. они помогают найти место ошибки.
   
  }
   
} else {

  show_message('Не удалось создать подключение!');
   
}


1.2 Создаем подключение и сессию для клиента:

Код

var session_count, session_numb;

if (mplay_init_tcpip('127.0.0.1')) { // подключаемся по адресу '127.0.0.1'.

  session_count = mplay_session_find(); // получаем количество сессий у подключенного соединения.

  if (session_count > 0) { // если нашли хоть одну сессию
   
  // тут можно вывести игроку список сессий и их мена с помощью команды mplay_session_name(numb).
   
  session_numb = 0; // устанавливаем к какой сессии будем подключаться (ее порядковый номер). Если вывести список игроку, то значение переменной будет завистеть от выбранной им сессии. Но т.к. мы список не выводим, то подключаемся к первой попавшейся =)
   
  if (mplay_session_join(session_numb, 'Player')) { // пытаемся подключиться в выбранной сессии
   
  mplay_data_mode(false); // отказываемся от проверки доставки сообщений.  
   
  } else {

  show_message('Не удалось подключиться к выбранной сессии!');
   
  }
   
  } else {

  show_message('Сессии не найдены!');
   
  }
   
} else {

  show_message('Не удалось создать подключение!');
   
}


! В имени сессии можно хранить полезную для пользователя информацию. К примеру максимальное количество игроков, моды, уровень и т.д. Выглядеть это будет примерно так: 'My Srver Name@10@no mods@map@easy'. Т.к. при переборе сессий мы получаем строку с их именами, то воспользовавшись работой со строками мы получим уйму полезной информации. Поэтому игрок сможет узнать о сессии полезную информацию не подключаясь к ней.

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

Код

var players_count, i, cur_player_name, cur_player_id;

players_count = mplay_player_find();

if (players_count > 0) {

  //далее можно организовать вывод списка игроков использовав следующий цикл
  for (i=1; i<=players_count; i+=1) { // начинаем отсчет с 1, т.к. 0-ым игроком являемся мы.
   
  //получаем информацию о игроках
  cur_player_name = mplay_player_name(i); // получаем ник игрока
  cur_player_id = mplay_player_id(i); // получаем уникальный идентификатор игрока 
   
  }

} else {

  //игроки не найдены, т.к. это не ошибка, то сообщать в виде сообщения не будем.
   
}


! По аналогии с именами сессий, в нике игрока можно передавать полезную информацию, к примеру его уровень, количество золота и т.д. К примеру: 'Constructor@1@2400'. После чего обработать функциями по работе со строками и получить информацию.

3. Отправка сообщений (данных).
Отправка данных является самой простой в работе с сетями, поэтому следующий кусок кода должен понять каждый. Как мы помним, команды для отправки сообщений принимают три параметра: player, id, val. И различаются по своей функциональности, одна гарантирует доставку пакетов данных, другая нет. Рассмотрим их использование более подробно:

Код

mplay_message_send(0, 1, 'Привет всем!'); // данной командой мы отправляем всем подключенным к сессии игрокам и серверу сообщение с идентификатором 1, содержащее строку 'Привет всем!'. Кроме строки можно отправлять любое целое или дробное число.

mplay_message_send(0, 2, player.x); // эти две команды отправляют координаты игрока.
mplay_message_send(0, 2, player.y);

//конечно можно воспользоваться и строкой для отправки массива данных:
mplay_message_send(0, 3, string(player.x) + '@' + string(player.y) + '@' + любая другая информация, к примеру угол поворота и т.д.); // в данной строке для разделения данных используется символ '@'. Вы можете использовать любой другой, но помните, что данный символ не должен вводить пользователь.


4. Получение данных.
Перед получением данных, которые нам пришли от других игроков или от сервера, нужно прежде всего узнать их количество. После чего в цикле обработать каждое сообщение. Или просто стереть их, воспользовавшись командой: mplay_message_clear(0).

Код

var messages_count;

messages_count = mplay_message_count(0); // получаем количество сообщений в массиве.

if (mplay_message_count(0) > 0) { // поверяем, есть ли сообщения

  // если сообщения есть, то надо обработать их все, любо стереть. Тут уже на ваше усмотрение.
  for (i=1; i<=messages_count; i+=1) {  
   
  if (mplay_message_receive(0)) {
   
  // Тут мы можем получить id сообщения (mplay_message_id()), данные (mplay_message_value()), ник игрока который оправил их (mplay_message_name()) и другую полезную информацию.
   
  }
   
  }

}


5. Закрытие подключения.
Перед тем как закрывать подключение стоит отправить остальным игрокам информацию о том, что вы собираетесь выйти. Для этого перед отключением достаточно отправить команду с заранее подготовленным для этого идентификатором.

Код

mplay_message_send(0, 999999, 0); // к примеру сообщение с идентификатором 999999 сообщает о том, что игрок выходит из игры или отключается
mplay_session_end(); // отключаемся от сессии
mplay_end(); // выходим из подключения

Категория: Game Maker | Просмотров: 8978 | Добавил: Конструктор (13.03.2014) | Рейтинг: 5.0/3
Теги: примеры, многопользовательская игра, Game maker, TCP/IP, кооператив, интернет, локальная сеть Автор: Вячеслав |
HTML ссылка на материал:
BB ссылка на материал:
Похожие материалы :
Возможно вам будет интересно:
Наглядный пример использования переменных (0)
Создание наземного врага в платформере (2)
Обмен информацией по TCP/IP-протоколу (Delphi) (0)
Учимся писать игру на Delphi (3)
Создаем 2-х битный теннис на двоих без программирования (0)
3D Rad - небольшая статья. (2)
Пингуем (Ping) под Delphi (1)
Работа с Сетью в Blitz3D: TCP (0)
Создаем вертолет (2)
Организация 3Д камеры в Game Maker (0)
Звуки и музыка (0)
AI часть 1 (0)
Несколько советов (ГМ) (0)
Устанавливаем на машину скин 3dRad (0)
Borland Assembler (BASM) уроки для начинающих (урок 7 часть 2) (0)
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск
Поиск по всему сайту:
Поиск по разделу:

Панель пользователя
Здравствуйте, Гость


Ник:
Пароль:
Запомнить :

Ваш IP: 3.229.122.112

Случайные конструкторы

Случайные движки

Случайные статьи

Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0

На сайте были:

При полном или частичном копировании материалов сайта ссылка на Make-Games.ru обязательна. Make-Games.ru © 2008 - 2024 Хостинг от uCoz
Топ Разработка игр