SUJA - Servidor Universal para Jogos Amadores

Criando CLIENTES para o SUJA no Builder

(usando componentes VCL)

RECEITA

SUJA é um servidor para jogos - aqui há aqui uma descrição de como usá-lo e como programar CLIENTES usando componentes do Borland C++ BUILDER 

Importante: para este tutorial foi usado o Borland C++ Builder 3, mas novas versões que contenham a paleta INTERNET devem funcionar sem problemas!

Utilizei o Builder 3 porque na minha versão gratuita é a que tinha a palete "Internet" com o ServerSocket e o ClientSocket. Qualquer versão que tenha a palete Internet instalada deve funcionar, provavelmente.


Ingredientes

1 Form

4 Label

4 Edit

3 Button

1 Status Bar

1 ClientSocket


Mode de preparo:

Coloque os componentes adequadamente dentro do Form1.

A seguir dê um duplo clique em cada um dos componentes abaixo listados, introduzindo o código colorido mostrado abaixo:

Button1:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    ClientSocket1->Address=Edit1->Text;
    ClientSocket1->Port=StrToInt(Edit2->Text);
    StatusBar1->SimpleText="Connecting ...";
   ClientSocket1->Open();
}

Button2:

void __fastcall TForm1::Button2Click(TObject *Sender)
{
    StatusBar1->SimpleText="Disconnecting ...";
    ClientSocket1->Close();
}

Button3:

void __fastcall TForm1::Button3Click(TObject *Sender)
{
    char buffer[256];
    int len;
    strcpy(buffer,Edit3->Text.c_str());
    len=ClientSocket1->Socket->SendBuf(buffer,strlen(buffer));
    StatusBar1->SimpleText=IntToStr(len)+" bytes sent!";

}

ClientSocket1 (Clique no componente ClientSocket1 dentro do Form, vá na aba Events do Object Inspector e procure os eventos OnConnect, OnDisconnect, OnError e OnRead, dando um duplo clique do lado direito de cada um deles adicionando para cada evento o código abaixo):

void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
      TCustomWinSocket *Socket)
{
    Button1->Enabled=false;
    Button2->Enabled=true;
    Button3->Enabled=true;
    StatusBar1->SimpleText="Connected!";

}
//---------------------------------------------------------------------------

void __fastcall TForm1::ClientSocket1Disconnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
    Button1->Enabled=true;
    Button2->Enabled=false;
    Button3->Enabled=false;
    StatusBar1->SimpleText="Disconnected!";

}
//---------------------------------------------------------------------------

void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
      TCustomWinSocket *Socket)
{
    char buffer[256];
    int len;
    len=ClientSocket1->Socket->ReceiveBuf(buffer,255);
    buffer[len]=0;
    Edit4->Text=StrPas(buffer);
    StatusBar1->SimpleText=IntToStr(len)+" bytes received!";

}
//---------------------------------------------------------------------------

void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
      TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
    StatusBar1->SimpleText="Socket Error!";
    ErrorCode=0;
}

Modifique a propriedade Caption do form e dos componentes (botões e labels) e limpe a propriedade Text de cada Edit conforme a imagem:

Labels:

Label1

Remote Host:

Label2

Port Number:

Label3

Message Sent:

Label4

Message Received:

Buttons

Button1

Connect

Button2

Disconnect

Button3

Send

Propriedade Text de cada Edit

Edit1

127.0.0.1

Edit2

4001

Edit3

Mensagem Inicial!

Edit4

[vazio]

 


Mode de usar :

1) chame o programa SUJA (o servidor de jogos) antes de rodar o cliente acima programado. O servidor, quando ativo, deve listar os IPs da máquina em que ele está rodando, supondo que seja uma máquina ligada em rede ou conectada na Internet;

2) rode o programa CLIENTE acima criado em quantas máquinas da rede quiser. Como o programa vai se comunicar com outros programas da rede, o ideal é que haja mais de duas máquinas rodando cada cliente, mas com duas mmáquinas já é possível testar o programa. Modifique os campos Remote Host (servidor remoto em Edit1) para o valor de IP detectado pelo servidor SUJA. Modifique a PORTA (Port Number no Edit2) para a porta correntemente usada (4001, por exemplo) pelo SUJA. Clique no botão CONNECT.

3) Se tudo der certo, o servidor SUJA deve detectar, para cada cliente rodando em rede, o número de conexões atual. Agora é só escrever uma mensagem no cliente no campo Message Sent (em Edit3) e clicar no botão Send (enviar). Todos os clientes conectados (inclusive quem está enviando a mensagem) receberão a mensagem enviada precedida do IP da máquina que a enviou.

Agora é com você! Use as mensagens enviadas para programar jogos em rede: ao invés de mensagens, cada cliente pode ser alterado para enviar posições ou jogadas de um jogo em andamento, além de detectar se a jogada é válida ou se alguém terminou/perdeu/ganhou o jogo! Você também pode alterar o programa para transformar os clientes em intercomunicadores pessoais, não esquecendo de inventar algum tipo de criptografia para seus programas-cliente!

Agora qualquer jogo online (seja de tabuleiro ou de ação) para jogadores em rede pode ser criado por você!


Copyright  Victor M. Sant'Anna  2007