Curso game master

Curso game master

(Parte 1 de 4)

Curso GM Online - 1º lição - Saiba como funciona um jogo Online

Game Maker Brasil :: Tutoriais da equipe GMBR :: Game Maker

Página 1 de 1 • Compartilhe • Mais!

  

Curso GM Online - 1º lição - Saiba como funciona um jogo Online

 por joaoneto em Seg Fev 02, 2009 1:04 pm

A maioria dos makers quer fazer um jogo online. Procuram engines e mais engines para não perderem tempo com desenvolvimento, para que seu jogo possa ser lançado o mais rápido possível. Porém, a maioria deles não tem a mínima idéia de como funciona a comunicação via TCP/IP e porque o jogo precisa de um servidor, entre outras coisas.Então vamos começar do início.Toda vez que você, no seu computador, abre o Client(aplicação EXE do seu jogo) do seu Ragnarok, e tenta "Logar" no servidor, o que acontece... Seu PC, estando conectado à internet por qualquer meio (Modem, ADSL, Cable, 3G, Etc...) faz com que o mesmo possua um IP. Quando fazemos qualquer coisa na Internet, abrimos uma página, conversamos no MSN, ou qualquer outra coisa, seu computador e os computadores espalhados pela nuvem que é a internet trocam informações, e para isso serve o IP.O IP é uma chave, que torna sua conexão com a internet única para que não haja conflito durante a "conversa" entre o seu computador e a Net.Quando você tenta logar no seu jogo favorito, você está enviando informações pela rede e aguardando respostas da mesma. Por esse motivo é chamado de Comunicação, pois sua máquina fala e ouve, e todas as máquinas na rede ouvem e respondem.Mas o que fazer jogos online e isso dae de cima tem a ver?? TUDO !!Quando você tenta se logar, você envia uma pergunta ao servidor do jogo, que por padrão já possui um IP/porta que ele deve acessar na rede e, quando ele acessa o mesmo, dentro daquela máquina há um aplicativo que todos chamam de server, o Listener. Mas que raios é um Listener??Listener é a aplicação que, através de uma configuração TCP/IP de IP e Porta, está "Ouvindo" aquela porta. Ouvindo sim, ela está aguardando chegar alguma coisa ali, para que ela possa interpretar e, se interpretado, devolver uma resposta a quem perguntou.Ao tentar logar, o seu Client envia uma pergunta para aquele IP/Porta, aguardando que, do lado de lá, haja um Listener, que vai ouvir a pergunta, interpretar, e responder para o seu Client "Seja bem vindo Fulano !!" se ele te reconhecer ou "Você não possui usuário e senha aqui seu atoa" se ele não te reconhecer.Então pense neste Fluxo:O que a sua aplicação Client deve fazer??

  • Efetuar conexão com o Listener

  • Enviar dados para ele

  • Receber dados dele

  • Trabalhar os dados recebidos

O que o seu server(Listener) deve fazer??

  • Aguardar conexões de Clients

  • Ouvir o que foi perguntado

  • responder para os N clients conectados as perguntas feitas

  • Compartilhar dados entre os Clients

Tudo bem, não entendi nada do que você disse, e agora??Se você entendeu os dois ultimos itens, já é um começo. Será a partir deles que vamos começar o desenvolvimento de um jogo Online simples, para ser jogado por duas pessoas(um Pong) e iremos evoluindo até o início de um MMO básico.Várias pessoas podem dizer que existem milhares de milhoes de exemplos disso na net, e realmente tem, porém eu estarei dando as MELHORES DICAS, mostrando as MELHORES ENGINES e principalmente respondendo às MAIORES DÙVIDAS.Para começar, Usaremos um GM que funciona, a versão 6.1.Para quem ainda não tem baixe aqui.Eu não estarei ensinando GM aqui. Nossas lições estarão focadas no desenvolvimento Online.Então, se você ainda não sabe como colocá-lo no modo avançado, criar sprites, Objects, Rooms, e principalmente Scripts, acho melhor começar seu aprendizado em outros tutoriais.Para os mais curiosos, saibam que irei ensinar:

  • Criando Clients e Servers

  • Enviando/Recebendo Dados

  • Criando um Chat

  • Criando o primeiro game com movimento

  • Banco de dados - Básico

  • DB - Criando um sistema de Login

  • DB - Iniciando um game com Conta

  • DB - Criando um MMO básico

Eu pretendo que os itens acima sejam só o começo. Como todos sabem, meu tempo é meio curto, e estou tentando me decidar ao máximo para que todos possam, como eu, se maravilhar com o GM.Até a próxima Lição.

Última edição por joaoneto em Qua Fev 04, 2009 1:14 pm, editado 1 vez(es)

Curso GM Online - 2º Lição - Primeiro teste Client/Listener

 por joaoneto em Seg Fev 02, 2009 1:06 pm

Na Aula anterior eu falei sobre Listeners e Clients, Objetos que são a base de todo Game On-line.O GM por padrão possui uma Engine de Comunicação TCP, porém não iremos usá-la, por ser muito básica, pesada demais e não funcionar “Behind Router”. Todos os termos desconhecidos serão explicados no decorrer do curso.Usaremos como base para nossos testes e exemplos de comunicação TCP a SOC – Simple Online Communication. De todas as Dlls de comunicação TPC ela é a mais simples de usar, a mais rápida em comunicação e o principal, funciona tanto UDP (intranet) quanto TCP Behind Router.A primeira coisa a fazer é baixar os scripts Fonte, a dll e o Directserver, Aqui.Ao terminar o Download, crie um novo projeto no GM. Crie uma pasta para ele, e chame-o de Client. Dentro da pasta onde salvou o projeto, coloque a soc.dll.Volte ao projeto. Clique no menu Scripts -> Import Scripts como mostra a figura abaixo:Selecione o arquivo socAll.gmlAo finalizar, seu diretório de scripts estará assim:Usaremos este primeiro teste como exemplo para todas as próximas lições então, lembre-se, os passos acima são os iniciais SEMPRE que começar um novo projeto On-line no GM.Para efetuarmos um primeiro teste, não criaremos o Listener. Usaremos o Directserver, um Listener Básico que vem com o soc.dll para testes de comunicação.A primeira coisa a fazer é iniciar o Directserver. Ao iniciá-lo, ele pergunta qual porta ele deve “escutar”.Digite 8040 e pressione Enter.Ele perguntará se ele deve mostrar as mensagens recebidas, aperte Y e pressione Enter.Ao fazer isso a primeira vez, o Firewall do Windows pedirá permissão para desbloquear a porta para o aplicativo. Desbloqueie. Observe a figura abaixo:Pronto. Qualquer comunicação TCP que chegar à porta 8040 agora será “escutada” pelo Directserver.Vamos fazer um teste??Crie um Objeto, Chame-o de objStart. Adicione um Evento Create, e nele um Execute a Piece of Code. Neste Execute, adicione as seguintes linhas:

Código:

//Iniciando o Socketsoc_init();//Conectando ao servidorif (!player_connect(8040, "localhost")) {    show_message("Falha ao Conectar no servidor.")    soc_free();    game_end();}

Mas o que fizemos aqui??Antes de mais nada iniciamos a dll. Na verificação abaixo, aguardamos um retorno verdadeiro da função de conexão, onde passamos como parâmetro a porta selecionada no directserver e o nome LocalHost. Se você já fez algum jogo Online, sabe que LocalHost significa sua máquina Local, ou seja, não há necessidade de se colocar um IP.Agora sim. Crie uma room, coloque o objStart nela e execute o jogo. Se foi tudo feito como foi falado aqui, seu DirectServer deve mostrar a seguinte mensagem:Observe que ele está mostrando o IP como 127.0.0.1. Este é o IP interno padrão de todo computador, Podemos usar tanto ele, quanto LocalHost quanto o nome da máquina.Ao fechar o jogo, o DirectServer mostrará a seguinte mensagem:Bom. De ínício, vimos que não é tão “complexo” iniciar a Dll e os scripts do SOC. Não criamos o servidor pois usamos um padrão e, de cara, não fizemos nada além de ver o servidor dizer que estávamos conectados(e como Player 2 ainda... Mas onde está o Player 1??) mas demos um grande passo.Eu configurei os scripts para facilitar a sua vida inicialmente, o script padrão que vem é bem mais complexo, usando a dll fora da pasta do jogo, usando constantes e outras chatices.Bem, começamos... Vamos tentar não parar no meio do caminho agora.Na próxima lição, vamos construir um Client de chat Simples, ainda usando o DirectServer como Servidor.Até lá.

Curso GM Online - 3º Lição - Comunicação entre Clients -> Chat

Game Maker Brasil :: Tutoriais da equipe GMBR :: Game Maker

Página 1 de 2 • Compartilhe • Mais!

Página 1 de 212  

  

Curso GM Online - 3º Lição - Comunicação entre Clients -> Chat

 por joaoneto em Seg Fev 02, 2009 1:12 pm

Na aula passada iniciamos nosso aprendizado sobre o uso da SOC – Simple Online Communication, uma das melhores Dlls de TCP já feitas para o GM.Hoje iremos fazer um sistema simples de comunicação, um Chat. Com poucas linhas de código, e usando o DirectServer (usado na aula passada como servidor) poderemos fazer um chat simples.Vamos usar o exemplo que foi construído na aula passada. Ele já possui a soc.dll, os scripts, e um objeto de inicialização. Nesta aula, para poder “escrever” na tela, estaremos trabalhando com o Evento Draw. Vamos lá.Abra o projeto Client, aquele que foi construído na aula passada. No objeto objStart, no evento Create, abra o Execute Code. Adicionaremos a ele algum código.Antes do código existente, adicione as variáveis nome e texto, Assim:

Código:

nome = "";texto = "";

Logo após, preencheremos a variável texto com um array de objetos vazios. Esta variável será nossa “caixa de texto” que armazenará e exibirá os textos que os usuários conectados escreverão e enviarão.

Código:

for(i=0; i<28; i+=1) {  texto[i]="";}

Estou colocando 27 itens visíveis, mas este valor pode ser mudado. Não entrarei em muitos detalhes de como embelezar o chat, pois a nossa intenção aqui é aprender a usar a soc.Para que pelo menos os usuários possam se “identificar” no chat, vamos colocar um get_string, que recuperará o nome do usuário para ser usado depois nas mensagens.

Código:

nome=get_string("Qual o seu nome?", "Maker "+string(floor(random(1000))));

A partir de agora, sempre me referirei ao usuário conectado como player. Vamos falar sobre comunicação. Para se comunicar, usamos os seguintes comandos da SOC:message_send( id, player, valor); Envia uma mensagem a um player específico, com ID e valor. Se player for 0(zero) a mensagem é enviada a todos os que estiverem conectados(pensou na possibilidade de uma sala privada??)message_receive(); Checa se chegou alguma mensagem.message_id(); retorna o ID da ultima mensagem recebida.message_player(); retorna o ID do player que enviou a ultima mensagem.message_value(); retorna o valor da ultima mensagem recebida.Usando os comandos acima, é que vamos fazer toda a comunicação entre o Listener e o Client, e de Client para Client. Não pense que, usando 0 no player, você não precisa do Listener, muito pelo contrário, é ele que, ao receber uma mensagem com player = 0 é que redireciona a mensagem para todos os players online.Voltemos ao Código. A primeira coisa a fazer é “avisar” a todos os players online que você entrou. Para isso, coloque o seguinte código logo após o código já existente:

Código:

message_send(1, 0, nome+" entrou na sala.");

A esta altura, o código do seu Evento Create deve estar assim:

Código:

nome = "";texto = "";for(i=0; i<28; i+=1) {  texto[i]="";}nome=get_string("Qual o seu nome?", "Maker "+string(floor(random(1000))));//Iniciando o Socketsoc_init();//Conectando ao servidorif (!player_connect(8040, "localhost")) {    show_message("Falha ao Conectar no servidor.")    soc_free();    game_end();}message_send(1, 0, nome+" entrou na sala.");

Então vejamos, passo a passo o código acima:

  • Ao iniciar, declaramos as variáveis que serão usadas nos textos.

  • Recuperamos o nome do player.

  • Iniciamos a Dll.

  • Tentamos conectar(o qual se não conseguir encerra a aplicação).

  • Enviamos uma mensagem que entramos na sala.

Agora a parte importante. Não basta apenas dizer que chegamos, precisamos averiguar a todo momento se chegou alguma mensagem, e poder digitar textos e envia-los. Vamos então.Adicione um Evento Step e nele um Execute Code. Agora adicione este código:

Código:

// Checamos se alguma mensagem chegouif(message_receive()) {  switch(message_id())  {  case 1:    // Se sim, colocaremos ela no array de strings    // Primeiro movemos todos para cima    for(i=0; i<27; i+=1) {      texto[i]=texto[i+1];    }    // Finalmente adicionamos a string que chegou    texto[27]=message_value();    break;  }}

Foi fácil. Agora, toda mensagem que chegar, será colocada na “fila” de mensagens. Vamos analizar o que foi feito ali em cima:

  • Validamos se chegou alguma mensagem. Se sim:

  • Usamos um case para saber se é o ID de mensagem que esperávamos. Da forma como foi feito no case, podemos enviar mensagens diferentes, com propósitos diferentes.

  • Subimos os textos na fila do array.

  • Colocamos o texto que chegou no Array.

Agora, vamos exibir as mensagens que chegarem.Adicione um evento Draw, nele um execute Code e adicione o Código:

Código:

// Desenharemos todas as linhas do arrayfor(i=0; i<28; i+=1) {  draw_text(10, 10+i*16, texto[i]);}// finalmente desenhamos o que se está digitandodraw_text(10, 454, ">> "+keyboard_string);

Estamos indo bem, configuramos a inicialização, a validação e a execução do nosso Chat. Mas ainda falta algo principal... Como vamos escrever?? Essa vem agora:Adicione um Evento Press, Nele um Execute code e coloque o seguinte código:

Código:

//Primeiro subimos as stringsfor(i=0; i<27; i+=1) {  texto[i]=texto[i+1];}// finalmente colocamos a string escrita, mais o nome.texto[27]=nome+": "+keyboard_string;// agora a enviamosmessage_send(1, 0, nome+": "+keyboard_string);keyboard_string = "";

Observe que fizemos o mesmo passo de subir a string e adicioná-la ao final do array, como no evento Step.Fizemos isso por uma simples razão:“A string enviada para o Listener, mesmo estando com player = 0, não retorna para quem a enviou”.Ou seja, devemos fazer do Lado Client aquilo que será feito do Lado Listener, para que vejamos o que aconteceu. Se o passo acima não for feito, todos os outros players verão a sua mensagem, menos você. Ao final, usamos o message_send, para enviar o que digitamos.A esta altura, podemos testar nosso Chat. Mas antes, para evitar erros, objetos instanciados na memória entre outras coisas, vamos adicionar um evento de saída. Adicione um Evento Press, coloque um Execute code e nele o código:

Código:

// Dizemos aos outros players que estamos saindo.message_send(1, 0, nome+" saiu.");// Desconectamos do Server.player_disconnect();// desalocamos a DLL.soc_free();// e finalizamos o jogo.game_end();

Examinando o código acima, é bem fácil ver o que acontece. Enviamos uma mensagem, dizendo que estamos saindo, desconectamos do Listener, liberamos a dll e finalizamos o jogo.Para podermos testar, precisamos compilar o executável, pois vamos abrir duas instancias do Client.Para compilar, vá no menu File -> Create Executable, como na figura abaixo:Após compilar, execute o Directserver(os passos de execução foram explicados na aula anterior) e execute duas instancias do Client.exe. Ao clicar em OK em uma delas, na outra aparecerá o texto que “o fulano entrou na sala.”. experimente digitar textos nas duas janelas, apertar enter e, para sair, não feche no X da janela, aperte ESC(nosso comando de saída, lembra??)Acabamos de entrar no que eu chamo de “esqueleto” de um jogo Online. Pense, você consegue se conectar a um servidor (Listener), dizer quem você é, enviar uma mensagem para que todos os que estiverem conectados possam ler, e ler as mensagens que todos enviarem.Nosso chat ficou meia-boca, dava pra fazer bem melhor. Mas a intenção da aula foi concluída, dar os primeiros passos na comunicação entre Clients, através do Listener, enviando e recebendo informações.Isto que foi mostrado aqui é a ponta da ponta do Iceberg. O GM é capaz de muito mais, mas muito mesmo, bastando saber como desenvolver. Alguns dirão:“Mas pra quê que eu vou perder tempo com isso, se o Netplay me dá isso pronto??”Eu sou um profissional. Me tornei profissional por querer sempre mais, aprender mais, inovar mais, e melhorar mais. Usar GM pra fazer jogo é coisa de quem já sabe o que quer, não apenas tenta. E eu estou aqui por estes, que sabem o que querem, e conseguirão.Por hoje é só. Na próxima aula, veremos como é simples fazer um “Pong” usando o SOC.Até lá.

Última edição por joaoneto em Qua Fev 04, 2009 1:14 pm, editado 1 vez(es)

Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!

Game Maker Brasil :: Tutoriais da equipe GMBR :: Game Maker

Página 1 de 1 • Compartilhe • Mais!

  

Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!

 por joaoneto em Seg Fev 02, 2009 1:15 pm

(Parte 1 de 4)

Comentários