Создание многопользовательской(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]
Все остальное, что не попадает ни под одну категорию.

Мини-Опрос
Вы следите за обновлениями конструкторо игр, движков?
Всего ответов: 304

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

 Главная » Статьи » Конструкторы игр, системы разработки игр » 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 | Просмотров: 3545 | Добавил: Конструктор (13.03.2014) | Рейтинг: 5.0/3
Теги: примеры, многопользовательская игра, game maker, TCP/IP, кооператив, интернет, локальная сеть Автор: Вячеслав |
HTML ссылка на материал:
BB ссылка на материал:
Похожие материалы :
Возможно вам будет интересно:
Поиск файлов на винчестере в Delphi (0)
Создание рикошета пуль от стены (4)
Переменные в Actionscript 2.0 (0)
Создаем анимацию игрока (0)
С чего начать создание игры для начинающих? (13)
Обмен информацией по TCP/IP-протоколу (Delphi) (0)
Молодому игроделу (5)
Экономика в ммо (2)
Blitz 3D - полезная дипломная работа (часть 1) (0)
Статья по движку Maratis (0)
Создание Платформенной Игры Copyright 2001 by Mark Overmars (0)
3d Rad - Как добавить свою модель (6)
Подробности о Unreal Engine 3.0 (3)
Создание арканойда шаг за шагом в XNA Game Studio (0)
24 совета по программированию в Delphi (Дельфи) часть 2 (0)
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Мы в социальных сетях

Поиск
Поиск по всему сайту:
Поиск по разделу:

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


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

Ваш IP: 54.163.166.22

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

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

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

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

На сайте были:
FireOfSteel , proto1ype , Vlados

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