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
» Colisões não funcionando
por RastaMaan Ontem à(s) 19:49

» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Ontem à(s) 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

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

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

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21


Manipulando Arquivos e informações - Parte 1

4 participantes

Ir para baixo

Manipulando Arquivos e informações - Parte 1 Empty Manipulando Arquivos e informações - Parte 1

Mensagem por Convidad Sáb 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?


Manipulando Arquivos e informações - Parte 1 Banner12


É 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');


Manipulando Arquivos e informações - Parte 1 Banner12
avatar
Convidad
Convidado


Ir para o topo Ir para baixo

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

Mensagem por Janx Sáb 09 Ago 2008, 19:47

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

tah mto bom!!
Janx
Janx

Data de inscrição : 24/05/2008
Reputação : 14
Número de Mensagens : 2417
Prêmios : Manipulando Arquivos e informações - Parte 1 Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 2 Bronze x 0

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

Ir para o topo Ir para baixo

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

Mensagem por Froidz Sáb 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
Froidz

Data de inscrição : 03/08/2008
Reputação : 4
Número de Mensagens : 1053
Prêmios : Manipulando Arquivos e informações - Parte 1 Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

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

Mensagem por Guardiani Sáb 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
Guardiani

Data de inscrição : 07/08/2008
Reputação : 1
Número de Mensagens : 31
Prêmios : Manipulando Arquivos e informações - Parte 1 Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

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

Mensagem por Volstagg Sáb 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
Volstagg

Data de inscrição : 16/05/2008
Reputação : 0
Número de Mensagens : 353
Prêmios : Manipulando Arquivos e informações - Parte 1 Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

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

Mensagem por Guardiani Sáb 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
Guardiani

Data de inscrição : 07/08/2008
Reputação : 1
Número de Mensagens : 31
Prêmios : Manipulando Arquivos e informações - Parte 1 Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

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

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


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