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
» Problema ao entrar por uma porta e voltar por ela
por aminaro Seg 06 maio 2024, 10:08

» Alguém aqui já ganha dinheiro com seus games?
por theguitarmester Ter 30 Abr 2024, 11:43

» Colisões não funcionando
por theguitarmester Ter 30 Abr 2024, 10:16

» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Sex 26 Abr 2024, 16:45

» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18

» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21


[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 : 40
Número de Mensagens : 399
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


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