DXPlay

Материал из DRKB


Многие игры в нынешнее время поддерживают мультиплеер, почему? Потому что сейчас люди уже перестали довольствоваться AI, который играет в частности 'линейно', его нельзя обмануть, пошутить над его действиями или разозлить... =) С ним играть можно только на уровне обучения игры, а далее - сеть, живые игроки… ;). Если это маленькое вступление заставило вас захотеть добавить в свою игру мультиплеер то эта статья для вас. Итак, сразу к делу. Сделаем самую легкую программу, с одной кнопкой. =) Кидаем ее на форму, не забыв кинуть DXPlay. В этой программе давайте сделаем что бы форма подключения DXPlay выводилась при запуске. Идем в настройки DXPlay и устанавливаем любой Guid путем нажатия кнопки New, этот параметр (imho) "устанавливает" уникальности вашему мультиплееру. Далее так: TForm1 -> Events -> OnCreate, и в процедуру кидаем:

try
  DXPlay1.Open; // Пытаемся открыть форму подключения
except
  on E: Exception do
  begin
    Application.ShowMainForm := False;
    Application.HandleException(E);
    Application.Terminate; // Если не подключаемся или ошибка выходим их программы
  end;
end;


Теперь при запуске программы у вас будет выводится форма DXPlay. После:

uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls, DXPlay;


Пишем:

const
  DXMESE = 1;
type
  TDXMessage = record
    MessageType: DWORD; // Тип сообщения
    Mes: Integer; // Тип пересылаемых данных, может быть несколько, к примеру - Mes2: String;
  end;


Далее, кликаем два раза на кнопку, создавая тем самым процедуру нажатия кнопки, и пишем туда:

var
  Msg: ^TDXMessage; // Ссылаемся на TDXMessage
  MsgSize: Integer; // Размер сообщения
begin
  MsgSize := SizeOf(TDXMessage); // Нужно узнать размер сообщения.
  GetMem(Msg, MsgSize);
  try
    Msg.MessageType := DXMESE; // Указываем тип сообщения
    Msg.Mes := Random(100); { Само сообщения, может быть что угодно, вплоть до нахождения курсора мышки }
    DXPlay1.SendMessage(DPID_ALLPLAYERS, Msg, MsgSize); // Отправляем мессагу всем игрокам
    DXPlay1.SendMessage(DXPlay1.LocalPlayer.ID, Msg, MsgSize); // Отправляем себе
  finally
    FreeMem(Msg); // Освобождаем память сообщения Msg
  end;
end;


Для приема делаем следующее - DXPlay1 -> Events -> OnMessage и пишем :

Button1.Left := TDXMessage(Data^).Mes; { Устанавливаем положения кнопки по горизонтали в соответствии с полученным числом }
Button1.Caption := IntToStr(TDXMessage(Data^).Mes); // Пишем это число


Итак, это уже конец, осталось чуть-чуть:

В процедуре уничтожения формы (FormDestroy) (TForm1 -> Events -> OnDestroy) пишем:

DXPlay1.Close; // Завершение подключения DXPlay.


И последний штрих - В units добавляем DirectX.

Все, запускаем и радуемся нашей первой программе с мультиплеером! =)


Author: SDil
Source: http://daddy.mirgames.ru
ID: 03926