GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» player não consegue andar
por lovn7 Ontem à(s) 13:33

» É possível fazer istó no game maker
por William Lima Ontem à(s) 10:56

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22

» Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31

» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23

» Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49

» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58

» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36

» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36

» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33

» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51

» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28

» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18

» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08

» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10

» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16

» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40

» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01

» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45

» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34

» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28

» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48

» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54

» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14

» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50


[Tutorial] Tratando strings recebidas do servidor

2 participantes

Ir para baixo

[Tutorial] Tratando strings recebidas do servidor Empty [Tutorial] Tratando strings recebidas do servidor

Mensagem por GabrielXavier Dom 31 Ago 2014, 21:36


  • Título: Tratando strings recebidas do servidor - http_get
  • Versão do GM: Game Maker Studio
  • Dificuldade: Mediano
  • Link para download da Engine: Indisponivél
  • Requer Extensões: Não.
  • Requer DLLs: Não.
  • Tags: Ler online; Tratando strings; Dados no servidor;


Bom aqui estudando sobre o nativo online do GMS PHP e MYSQL aprendi bastante coisa e me veio aquela vontade de fazer um tutorial, pensei um pouco e decidi fazer um tutorial que ensine a tratar as strings recebidas de um servidor atravez da função http_get,
Aprendi este metodo usando o tutorial do Fredcobain mas não sabia como tratar as strings recebidas então bolei um pequeno script que "divide" o texto recebido em partes como Nome, Senha, Nivel ou qualquer coisa que você quiser.
Não vou ensinar a usar a função Http_get pois o tutorial do Fred ja está otimo então segue o link:

Lendo (e carregando) arquivos online

Optei por baixar as informações de uma pagina PHP e não de um arquivo INI como no tutorial do Fred.

A função http_get("http://Tutorial.php"); retorna toda a impressão que esta sendo feita na pagina php cujo link foi passado, por exemplo, uma pagina php com este codigo:
Código:
<?php

echo "Olá Gabriel Xavier";

?>
Imprimira na tela  o texto "Olá Gabriel Xavier" e caso o http_get esteja acessando esta pagina o texto que sera retornado será exatamente o mesmo que esta sendo impresso pela pagina php.

Então, mulecada já sabemos oque será retornado sempre que utilizarmos a função http_get, strings e mais strings.

Mas eis a questão, como vou saber oque é nome de usuario? Oque é senha??
Bem isso não é tão complexo como parece!

Pensando em uma pagina php com o seguinte codigo:

Tutorial.php

Código:
<?php

$nome="Gabriel";
$senha="12345";
$nivel="50";
$xp="130";

echo "$nome,$senha,$nivel,$xp";

?>

Ao utilizar a função http_get("http://Tutorial.php"); o retorna seria a seguinte string "Gabriel,12345,50,130" (sem as aspas).

Mas e agora Gabriel? Como separar estes dados?
Acalme-se! É bem simples.

Para desembaraçar esses dados usaremos o seguinte script que fiz:
Código:
//----- Script de tratamento de strings-----//
/*
argument0 - id da lista que armazenara as strings tratadas
argument1 - string a ser tratada
*/

ds_list_clear(argument0); // limpa a lista para receber novos dados

t_x_t=argument1; // salva a string passada na variavel
n_m_r=1+string_count(",",t_x_t); // Retorna o numero de parametros passados

for(_i_=1;_i_<=n_m_r;_i_+=1){ // Se i for menor ou igual ao numero de parametros na string

 if (_i_=n_m_r) // se for a ultima string então o unico texto que resta na variavel t_x_t é o ultimo parametro
  {
  ds_list_add(argument0,t_x_t); // Então salvamos a string na ds_list
  break; // e encerrams o laço FOR
  }
  
   p_o_s=string_pos(",",t_x_t); // Identifica a posicao da proxima virgula
   ds_list_add(argument0,string_copy(t_x_t,1,p_o_s-1)); // Adiciona o pedaço da string na lista
   t_x_t=string_delete(t_x_t,1,p_o_s); // Deleta a parte da string que ja guardamos na lista
  
}

return n_m_r; //Retorna o numero de parametros na string passada, para saber o tamanho da lista por exemplo

Caraca mano! Oque? Como isso funciona?

Bom a ideia desse pequeno script é a seguinte,

Ele pega a string que foi retornada pela http_get digamos que essa string é a seguinte:
Código:
texto="Gabriel,12345,50,130";

O script é simples, ele recebera dois argumentos o "argument0" recebe o id de uma ds_list feita exclusivamente para armazenar estes dados, o segundo argumento "argument1" recebe a string a ser dividida.

A função string_count(substring,string) retorna quantas ocorrencias de substring foi ocorrida em string, em outras palavas ela retona quantas vezes o caractere em questão foi encontrado na string, então essa função em nosso codigo conta quantas virgulas foram encontradas na string texto="Gabriel,12345,50,130";


Reparando que na string texto há 4 parametros (Nome=Gabriel,Senha=12345,Nivel=50,Xp=130) mas so existem 3 virgulas "," então por isso existe um "+1" em nosso script n_m_r=1+string_count(",",t_x_t); pois precisamos saber o numero de parametros que serão recebidos em nossa string baixada do pagina php.
Obs: As virgulas são quem nos indicaram onde termina um parametro.

Já expliquei bem a função acima e ela creio eu que seja a parte mais importante do nosso script pois ela possibilita que inumeros parametros sejam passados e salvos de forma "automatica" em nosso script.

Após identificar o numero de parametros que foram passados na string o proximo passo é identificar onde termina o nosso primeiro parametro que predefinidamente termina na primeira virgula texto="Gabriel,12345,50,130"; quem é responsavél por encontrar esta virgula é a função p_o_s=string_pos(",",t_x_t); que retorna em p_o_s a posição que está nossa primeira virgula que no caso é a posição 8.
Então ja sabemos que o nosso nome de usuario começa na posição 1 da string e vai ate a posição 7 pois a posição 8 ja é a virgula que separa nossos argumentos


Agora que ja sabemos onde termina nosso primeiro parametro precisamos separa-lo do restante do texto e salva-lo em algum lugar e quem fará isso é a função string_copy(string,começo,fim) esta função ira retornar a string que esta na posição começo ate a string que esta na posição fim em (em nosso script string_copy(t_x_t,1,p_o_s-1)).

Pronto \o/ finalmete conseguimos separar nosso nome de usuario do restante da string, agora precisamos salva-lo, mas salva-lo onde?
Em uma ds_lis, lembra que passamos o id de uma ds_list la no argument0 do nosso script? Bom é nela que vamos guardar o nosso nome de usuario na posição 0 dessa ds_list! 
ds_list_add(argument0,string_copy(t_x_t,1,p_o_s-1));

Como iremos pegar o restante dos nossos dados nessa string?

A ideia é a mais simples de todas (óóóóhhhh como?) usando a função string_delete(string,começo,fim); esta função ira deletar a string entre os indices começo e fim e retorna o resto, então é bem simples a função deleta de nossa string esta parte em negrito "Gabriel,12345,50,130".


Observaram que existe um laço for em nosso script? Não? Volta la e olha!
Este laço sabe quantos parametros temos em nossa string pois ele esta usando como referencia os dados retornados pela função string_count(substring,string) explicada acima então este laço for irá roda exatamente o numero de parametros da string em voltas, agora ficou facil, cada volta do nosso for será salvo um parametro em nossa ds_list e esse mesmo parametro mais a primeira virgula serão deletados da nossa string.

Após a primeira volta nossa string fica assim "12345,50,130", após a segunda volta fica assim "50,130e após a terceira fica assim "130", mas e agora Gabriel? 
Não temos mais uma virgula para pegar como referencia para sabermos onde termina nosso proximo parametro ://

Cara na boa repara bem! 
So nos restou um parametro! 

Não temos outro então oque resta em nossa string é simplemente o nosso ultimo parametro!
Sim mas e como nosso laço for ira saber que ja é hora de parar? A varias formas de fazer isso decidi usar um if para verificar qual será nossa ultima volta, caso seja nossa ultima volta do laço for entramos no if salvamos nosso ultimo parametro na nossa ds_list e damos um break para finalizar o laço for.

Por ultimo retornamos o numero de parametros que foram salvos para sabermos quantos indices tem em nossa ds_list.

Agora vou mostrar como usar esse script, é importante lembrar de colocar os dados sempre na mesma ordem quando impressos em sua pagina php e quando salvos em sua ds_list.

Create
Código:
list=ds_list_create(); // Cria a lista que guardara as strings baixadas do servidor
http_get("Link de sua pagina php"); // Acessa o link

aux=noone; // Variavél que checara se podemos imprimir algo na tela


Asynchronous>HTTP
Código:

texto=ds_map_find_value(async_load,"result"); // Salva o texto recebido na variavel

nmr=scr_tratando_string(list,texto); // Chama a fução para tratar as strings, retorna o numero de dados obtidos

//scr_tratando_string(id_da_lista,string);

aux=ds_map_find_value(async_load,"http_status"); //  caso retorne 200 a sincronia foi bem sucedida


Draw
Código:
if (aux=200){//se for = 200 podemos imprimir

  draw_text(10,15*1,"Nome:"+string(ds_list_find_value(list,0)));
  draw_text(10,15*2,"Senha:"+string(ds_list_find_value(list,1)));
  draw_text(10,15*3,"Nivel:"+string(ds_list_find_value(list,2)));
  draw_text(10,15*4,"XP:"+string(ds_list_find_value(list,3)));
  
}

E criamos um script:

scr_tratando_string
Código:
//----- Script de tratamento de strings-----//
/*
argument0 - id da lista que armazenara as strings tratadas
argument1 - string a ser tratada
*/

t_x_t=argument1; // salva a string passada na variavel
n_m_r=1+string_count(",",t_x_t); // Retorna o numero de parametros passados

for(_i_=1;_i_<=n_m_r;_i_+=1){ // Se i for menor ou igual ao numero de parametros na string

 if (_i_=n_m_r) // se for a ultima string então o unico texto que resta na variavel t_x_t é o ultimo parametro
  {
  ds_list_add(argument0,t_x_t); // Então salvamos a string na ds_list
  break; // e encerrams o laço FOR
  }
  
   p_o_s=string_pos(",",t_x_t); // Identifica a posicao da proxima virgula
   ds_list_add(argument0,string_copy(t_x_t,1,p_o_s-1)); // Adiciona o pedaço da string na lista
   t_x_t=string_delete(t_x_t,1,p_o_s); // Deleta a parte da string que ja guardamos na lista
  
}

return n_m_r; //  retorna o numero de parametros na string passada, para saber o tamanho da lista por exemplo


Pronto agora está apto a carregar dados de seus jogos em um banco de dados na nuvem!!!

ABRAÇOS!


Última edição por GabrielXavier em Dom 21 Set 2014, 17:30, editado 2 vez(es) (Motivo da edição : Correções Gramaticais)
GabrielXavier
GabrielXavier

Games Ranking : Nota A

Notas recebidas : A
Data de inscrição : 25/02/2012
Reputação : 45
Número de Mensagens : 403
Prêmios : [Tutorial] Tratando strings recebidas do servidor Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 0 Prata x 1 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker Studio 2.0


Ir para o topo Ir para baixo

[Tutorial] Tratando strings recebidas do servidor Empty Re: [Tutorial] Tratando strings recebidas do servidor

Mensagem por fredcobain Qua 10 Set 2014, 17:49

Gabriel, maravilha de tutorial.

Bem explicado, bem identado, bastante útil.

Resumindo: Staff Choice!

Parabéns e obrigado pela contribuição!
fredcobain
fredcobain

Games Ranking : Sem avaliações

Data de inscrição : 14/04/2011
Reputação : 163
Número de Mensagens : 692
Prêmios : [Tutorial] Tratando strings recebidas do servidor Empty

Medalhas x 0 Tutoriais x 3 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

GabrielXavier gosta desta mensagem

Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos