Dados de Jogos – Parte 1

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é!

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: