Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) 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
» (RESOLVIDO) 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
Manipulando Arquivos e informações - Parte 1
4 participantes
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Manipulando Arquivos e informações - Parte 1
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.
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\".
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).
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):
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:
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');
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
Re: Manipulando Arquivos e informações - Parte 1
bem legal cara!
eu ja sabia, mas vai ajudar mta gente!!!
tah mto bom!!
eu ja sabia, mas vai ajudar mta gente!!!
tah mto bom!!
Janx- Data de inscrição : 24/05/2008
Reputação : 14
Número de Mensagens : 2417
Prêmios :
x 0 x 0 x 0
x 0 x 2 x 0
x 0 x 0 x 0
Re: Manipulando Arquivos e informações - Parte 1
putz cara, tava pensando em fazer um tutorial desses hoje, mas acabei desistindo.. xD
mas tah muito bom! Parabéns..
Vlw!^^
mas tah muito bom! Parabéns..
Vlw!^^
Froidz- Data de inscrição : 03/08/2008
Reputação : 4
Número de Mensagens : 1053
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Manipulando Arquivos e informações - Parte 1
Muito legal o tuto, mas infelismente ainda é "abrivel" pelo bloco de notas
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!
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- Data de inscrição : 07/08/2008
Reputação : 1
Número de Mensagens : 31
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Manipulando Arquivos e informações - Parte 1
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.
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.
Volstagg- Data de inscrição : 16/05/2008
Reputação : 0
Número de Mensagens : 353
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Manipulando Arquivos e informações - Parte 1
É, 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!!
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- Data de inscrição : 07/08/2008
Reputação : 1
Número de Mensagens : 31
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos