Vou começar uma pequena série de tutoriais simples de como armazenar dados do seu jogo em arquivos. Os tutoriais seguirão este índice:
- Parte 1 – Arquivos de configuração do Allegro
- Parte 2 – Arquivos XML com o TinyXML
- Parte 3 – Arquivos próprios com a lib do C
Bom, como está na lista, vamos começar pelos arquivos de configuração do Allegro.
O Allegro possui funções para manipular arquivos no formato INI (apesar do formato, pode ter qualquer extensão), por exemplo:
[secao] variavel=valor var=12
Assim fica muito fácil de adicionar ou recuperar dados desse arquivo.
As funções básicas são essas:
void set_config_file(const char *filename); void set_config_string(const char *section, const char *name, const char *val); void set_config_int(const char *section, const char *name, int val); void set_config_hex(const char *section, const char *name, int val); void set_config_float(const char *section, const char *name, float val); const char * get_config_string(const char *section, const char *name, const char *val); int get_config_int(const char *section, const char *name, int val); int get_config_hex(const char *section, const char *name, int val); float get_config_float(const char *section, const char *name, float val);
Vamos ver uma por uma:
void set_config_file(const char *filename);
Está função carrega o arquivo de configuração que vai ser usado.
void set_config_string(const char *section, const char *name, const char *val);
Insere um valor no formato String (cadeia de caracteres) na seção section e campo name.
void set_config_int(const char *section, const char *name, int val);
Insere um inteiro na seção section e no campo name.
void set_config_hex(const char *section, const char *name, int val);
Insere um número hexadecimal na seção section e campo name.
void set_config_float(const char *section, const char *name, float val);
Insere um Float (ponto-flutuante) na seção section e campo nome.
const char * get_config_string(const char *section, const char *name, const char *val);
Retorna a string guardada no campo name e na seção section, caso dê algum erro, ele retorna val.
int get_config_int(const char *section, const char *name, int val);
Retorna um inteiro que estiver guardado no campo name e seção section, em caso de erro, retorna val.
int get_config_hex(const char *section, const char *name, int val);
Idem a anterior, porém com números hexadecimais.
float get_config_float(const char *section, const char *name, float val);
Idem, porém com floats.
Até aqui deu para entendermos as funções, mas vamos à um exemplo prático.
Suponhamos que queremos guardar as opções de vídeo do jogo e temos este arquivo:
config.ini
# # Arquivo de configuração de vídeo # [config] res_w = 640 res_h = 480 cores = 32 modo = 1 titulo = Meu jogo
Ah, eu me esqueci de dizer, que os # são comentários.
Então, vamos supor que res_w, seja o tamanho em pixels da resolução no eixo horizontal, res_h no vertical, cores, os modos de cores, modo, se for 1 é em Fullscreen e 0 em janela e titulo, o titulo da janela.
Agora vamos recuperar estes dados pelo programa em C++:
int w, h; // Resolução
int cor; // Cores
int modo; // Modo (Windowed ou Fullscreen)
char *title; // Título da janela.
/* Seleciona o arquivo */
set_config_file("config.ini");
/* Colocamos o valor de default como -1, para verificarmos se deu erro */
w = get_config_int("config", "res_w", -1);
if (w == -1)
{
// Erro aqui...
}
h = get_config_int("config", "res_h", -1);
if (h == -1)
{
// Erro aqui...
}
cor = get_config_int("config", "cores", -1);
if (cor == -1)
{
// Erro aqui...
}
modo = get_config_int("config", "res_w", -1);
if (modo == -1)
{
// Erro aqui...
}
/* Aqui nós temos que alocar a string e copiar com o strcpy */
title = new char[50];
strcpy(title, get_config_string("config", "titulo", "Erro"));
Pronto, você resgatou todos os dados, basta saber usá-los! Agora, vamos supor que o usuário alterou as configurações pelo game e tem que salvar no arquivo:
/* Vou mudar os valores para testar */
w = 800;
h = 600;
cor = 16;
modo = 0;
title = new char[50];
strcpy(title, "GAme de Teste");
/* Vamos salvar no arquivo agora */
set_config_int("config", "res_w", w);
set_config_int("config", "res_h", h);
set_config_int("config", "cores", cor);
set_config_int("config", "modo", modo);
set_config_string("config", "titulo", title);
Fácil não? Agora basta criatividade para usar, pois dá para usar em uma infinidade de coisas, como um Highscore por exemplo (fiz isso no TheTarget), veja como está o arquivo:
# # Highscores # [slot1] pts = 18115 [slot2] pts = 9325 [slot3] pts = 3740 [slot4] pts = 2740 [slot5] pts = 1660
Bem simples, porém bem útil, desde que você consiga manipular os dados no jogo
Valew! Até!











Contato