Manipulando Arquivos e informações - Parte 1

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Qualidade Manipulando Arquivos e informações - Parte 1

Mensagem por Convidad em Sab 09 Ago 2008, 19:43

E aí moçada!

Bom, eu percebi que boa parte dos usuários estavam com certa dificuldade na hora de manipular arquivos externos no Game Maker e fiz um pequeno tutorial para ajudar.

Há dois modos de leitura e escrita: o modo texto e o modo binário. Nesse tutorial eu vou explicar com funciona o modo texto, por ser mais fácil que o binário. No binário, a gente vai ter que aprender (ou relembrar) a hierarquia dos bits e como funcionam, ok?




É bem fácil e acho que todos vão gostar porque isso possibilita fazer muita coisa legal como guardar senhas ou outras informações que não deveriam ser lidas pelo jogador em um arquivo de texto. Eu pessoalmente prefiro fazer um "save game" dessa forma por ser mais seguro. Quando a gente usa o game_save() do Game Maker há comodidade e facilidade mas há também uma margem muito maior de erros.


Manipulando Arquivos e informações - Parte 1



Criando o arquivo e escrevendo informaçõe

A primeira coisa que devemos saber é que para manipular um arquivo (ler ou escrever informações nele) a gente tem uma "rotina" para seguir que deve ser feita em um arquivo de cada vez. É ela:

1 - Abrir o arquivo (informar se é para leitura ou escrita).

2 - Escrever ou ler informações no arquivo aberto.

3 - Fechar o arquivo para não corrompê-lo ou perder informações.

É importante saber que nós não vamos manipular arquivos pelo nome dos mesmos, porque seria incoveniente ter que informar ao Game Maker nomes ou diretórios muito grandes o tempo todo. Vamos manipulá-los através de um número de identificação que vai ser "armazenado" em uma variável com o nome que você escolher.

Vamos começar pelo número de identificação então. As funções que retornam esse número pra gente são as funções de abertura ou criação do arquivo. No exemplo, nosso arquivo terá o nome "gameinfo.dat" (você pode inventar sua própria extenção se quiser) e estará na pasta "c:\meujogo\".

Código:
novo_arquivo := file_text_open_write('c:\meujogo\gameinfo.dat');

A função file_text_open_write('nome do arquivo') abre um arquivo para adicionarmos informações nele, e caso esse arquivo não exista então ele será criado. A variável novo_arquivo agora armazena o número de identificação que precisamos.

Nós também temos a função file_text_open_append('nome do arquivo'). Essa função abre um arquivo para escrita a partir do final. Com ela a gente não perde as informações que já estão escritas no início do arquivo.

Sempre que a gente escreve informações em um arquivo, é conveniente organizá-las por linhas para facilitar a leitura (caso a escrita seja modo texto). Para isso a gente conta com uma informação importante porém "invisível" que é o "carro de linha" (eol - end of line). O eol (vamos chamá-lo assim pra gente ir acostumando) indica para um interpretador de textos quando uma linha "acaba" e quando ele deve "ir" para a linha de baixo. Assim nós vamos organizar as informações na escrita para não fazer confusão na leitura.

Importante: não confunda eol (end of line - carro de linha) com eof (end of file - final do arquivo). O eof é usado na função file_text_eof(identificação do arquivo) para retornar quando chegamos ao final do arquivo.


Vamos agora escrever alguma informação nele. No exemplo abaixo, o nosso arquivo 'gameinfo.dat' conterá informações sobre: nome do jogador, energia do personagem, a room em que se encontra e pontuação.

Para "escrever" nesse arquivo, nós vamos usar as funções:

file_text_write_string(identificação do arquivo,texto)
Essa função escreve uma informação de texto (string) na linha em que estamos.

file_text_write_real(identificação do arquivo,x)
Essa função escreve uma informação real (numérica) na linha em que estamos. O x é o número que vamos escrever.

file_text_writeln(identificação do arquivo)
Essa função finaliza a linha com um eol e passa a ecrever na linha de baixo (cria uma nova linha).

Código:
file_text_write_string(novo_arquivo,'Marcelo'); // Nome do jogador
file_text_writeln(novo_arquivo); // eol

file_text_write_real(novo_arquivo,80); // Energia
file_text_writeln(novo_arquivo); // eol

file_text_write_real(novo_arquivo,2); // Room e que se encontra
file_text_writeln(novo_arquivo); // eol

file_text_write_real(novo_arquivo,30000); // Score do jogador


Como nós já escrevemos as informaçõe necessárias vamos fechar o arquivo com a função file_text_close(identificação do arquivo):

Código:
file_text_close(novo_arquivo);


Buscando informações no arquivo

Agora vamos ler as informações que escrevemos no nosso arquivo "gameinfo.dat". Dessa vez vamos usar as funções de leitura porque o arquivo já foi escrito. Como eu havia dito, a ordem das informações na escrita é muito importante para que não haja confusão agora.

Nós sabemos que a primeira linha contém a informação do nome do jogador que é um texto e as linhas restantes contém informações numéricas sobre energia, room e score respectivamente.

As funções de leitura são:

file_text_open_read(nome do arquivo)
Abre um arquivo para ser lido.

file_text_read_string(identificação do arquivo)
Lê uma informação de texto na linha onde está o interpretador.

file_text_read_real(identificação do arquivo)
Lê uma informação real (numérica) na linha onde está o interpretador.

file_text_readln(identificação do arquivo)
Salta para o eol (carro de linha), ou seja, passa a ler a próxima linha do arquivo.


Vamos ao código:


Código:
arquivo_savegame := file_text_open_read('c:\meujogo\gameinfo.dat'); /* Abre o arquivo para leitura e armazena o identificador na variável "arquivo_savegame". */

nome_do_jogador := file_text_read_string(arquivo_savegame); /* Lê a primeira linha (nome do jogador). Essa informação é texto. */

file_text_readln(arquivo_savegame); /* eol. Vai para a próxima linha do arquivo. /*

health := file_text_read_real(arquivo_savegame); /* Lê a segunda linha (energia). Essa informação é um número. */

file_text_readln(arquivo_savegame); /* eol. Vai para a próxima linha do arquivo. */

cenario := file_text_read_real(arquivo_savegame); /* Lê a terceira linha (room). Essa informação é um número (id da room). */

file_text_readln(arquivo_savegame); /* eol. Vai para a próxima linha do arquivo. */

score := file_text_read_real(arquivo_savegame); /* Lê a quarta linha(pontos). Essa informação é um número (score). */

file_text_close(arquivo_savegame); // Fecha o arquivo

room_goto(cenario);


Funções de apoio

Atenção galera: essas funções não pedem confirmação. Tenham cuidado ao manipular arquivos da máquina!!!

file_exists(nome do arquivo)
Retorna se um arquivo existe (true) ou está faltando (false).

file_delete(nome do arquivo)
Apaga um arquivo. Cuidado com essa função, ok? Ela não pede nenhuma confirmação e o arquivo não vai para a lixeira!!!

file_rename(oldname,newname)
Renomeia um arquivo com oldname (nome antigo) para newname (novo nome).

file_copy(fname,newname)
Faz uma cópia do arquivo fname (nome original) para newname (nome para a cópia).

directory_exists(nome do diretório)
Retorna se um diretório existe (true) ou está faltando (false).

directory_create(dname)
Cria uma nova pasta com um nome dname. Você deve incluir o caminho desse diretório.

filename_name(nome do arquivo)
Retorna o nome do arquivo com a extenção mas sem o caminho (diretório).

filename_path(fname)
Retorna o caminho do diretório com barra ao final ("...\") onde se encontra o arquivo fname.

filename_dir(nome do arquivo)
Retorna o diretório sem a barra ao final onde se encontra o arquivo fname.

filename_drive(fname)
Retorna o drive (partição) onde está o arquivo fname.

filename_ext(fname)
Retorna a extenção do arquivo incluindo o ponto. Ex: ('.exe');



Convidad
Convidado


Voltar ao Topo Ir em baixo

Qualidade Re: Manipulando Arquivos e informações - Parte 1

Mensagem por Janx em Sab 09 Ago 2008, 19:47

bem legal cara!
eu ja sabia, mas vai ajudar mta gente!!!

tah mto bom!!

Janx

Número de Mensagens : 2417
Idade : 23
Data de inscrição : 24/05/2008
Reputação : 14
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 0

Voltar ao Topo Ir em baixo

Qualidade Re: Manipulando Arquivos e informações - Parte 1

Mensagem por Froidz em Sab 09 Ago 2008, 20:04

putz cara, tava pensando em fazer um tutorial desses hoje, mas acabei desistindo.. xD
mas tah muito bom! Parabéns..

Vlw!^^

Froidz

Número de Mensagens : 1053
Idade : 23
Data de inscrição : 03/08/2008
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Qualidade Re: Manipulando Arquivos e informações - Parte 1

Mensagem por Guardiani em Sab 09 Ago 2008, 20:42

Muito legal o tuto, mas infelismente ainda é "abrivel" pelo bloco de notas Sad

Tem chance de fazer um tuto de binario, ou algo que fique criptografado? Se não, por enquanto dá pra inventar um código para o save...

vlw!

Guardiani

Número de Mensagens : 31
Data de inscrição : 07/08/2008
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Qualidade Re: Manipulando Arquivos e informações - Parte 1

Mensagem por Volstagg em Sab 09 Ago 2008, 21:56

Muito bom brendan!

Guardiani, tenta fazer sua própria encriptação.
Vou te dar uma idéia(acredito que seja possível de coloca-la em prática): Fazer o GM interpretar o arquivo de maneira diferente. Vamos dizer que eu quero que o GM interprete "2" como § , "0" como ¢ e "8" como £ . Se você quiser salvar o numero 2008 você põe pro GM salvar no arquivo .dat como §¢¢£ e ler o §¢¢£ como 2008.
Ai o espertão que for querer trapacear no jogo vai abrir o arquivo, vai ver esses caracteres e vai pensar: WTF? xD

PS: Eu só dei um exemplo, não sei se essa seria a melhor maneira e nem tentei pensar como ficaria um código pra fazer isso. Mas é só você tentar inventar sua própria maneira de encriptação.

O expert's ai podem te dar dicas melhores. Very Happy

Volstagg

Número de Mensagens : 353
Data de inscrição : 16/05/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Qualidade Re: Manipulando Arquivos e informações - Parte 1

Mensagem por Guardiani em Sab 09 Ago 2008, 23:32

É, acho que vou tentar isso...

Sabendo escrever em arquivos de texto e inventando um código pra isso, axo que já está bom.... Valew pela dica!


Ah, uma forma que eu pensei, é usar uma equação, tipo:

var_do_arquivo = (10*var_do_jogo-2)/25

para ler:

var_do_jogo = ((var_do_arquivo*25)+2)/10

Daí se a var_do_jogo for 8 a var_do_arquivo será 3,12 (no caso de número de vidas ou de munição isso seria imposível!), e se o jogo não ler algo que dê inteiro, resetará tudo...


De qualquer forma, alguém tem idéia de um código pra 2008 virar §¢¢£??

Obrigado!!

Guardiani

Número de Mensagens : 31
Data de inscrição : 07/08/2008
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Qualidade Re: Manipulando Arquivos e informações - Parte 1

Mensagem por Conteúdo patrocinado Hoje à(s) 11:42


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum