2016-03-29 6 views
1

У меня есть конфигурационный файл, хранить картуAllegro 5 перебрать значения конфигурационного файла с таким же именем

name=map1 
width=5 
height=5 
[tiles] 
    l=0,0,1,0,0 
    l=0,1,1,1,0 
    l=0,1,0,1,0 
    l=0,1,0,1,0 
    l=0,0,0,0,0 
[/tiles] 

Как я Переберите секции [плитка], чтобы сохранить его линию (L) значений в моем вектор?

Примечание: я положил знак allegro5, потому что он имеет функции для файлов конфигурации нагрузки.

+0

Думаю, вам нужно будет определить, когда прекратить чтение. Похоже, фраза '[/ tiles]' является концом цикла. Поэтому, когда вы читаете строку и в ней содержится текст, «break» выходит из цикла. –

+0

Что ваш вопрос связан с тегом 'allegro5', когда речь идет о разборе файла конфигурации? –

+0

@ Томас Мэтьюз, я поставил знак allegro5, потому что я делаю игру в этой библиотеке, а allegro5 включает в себя функции для файлов конфигурации загрузки, поэтому мне не нужно писать собственный код или импортировать внешние библиотеки для анализа файлов конфигурации. –

ответ

1

Как вы обнаружили, Allegro будет принимать только последний ряд записей с тем же ключом. В то время как вы могли бы дать каждой строке другой ключ, вы можете вместо воспользоваться тем фактом, что = присвоение не является обязательным:

[tiles] 
    0,0,1,0,0 
    0,1,1,1,0 
    0,1,0,1,0 
    0,1,0,1,0 
    0,0,0,0,0 
[/tiles] 

Теперь данные для каждой строки хранится в «ключе» сам, и «значение» - игнорируется.

int main() { 
    ALLEGRO_CONFIG *cfg; 
    ALLEGRO_CONFIG_ENTRY *entry; 
    const char* row; 

    al_init(); 

    cfg = al_load_config_file("config.cfg"); 

    row = al_get_first_config_entry(cfg, "tiles", &entry); 
    while (entry) { 
     printf("%s\n", row); 
     row = al_get_next_config_entry(&entry); 
    } 

    return 0; 
} 
+0

Цистерны !, это очень удобно и полезно, что мой ответ, похоже, вы знаете о allegro5, я трюк тег allegro5, похоже, не очень активен в Stack Overflow, Tank для вашего ответа. –

+0

Действительно, его не так активно, как в прошлом. Назад на [форум] (http://www.allegro.cc) у нас немного больше активности :) – rlam12

0

я нашел, чтобы сделать это через некоторое время чтения ссылку allegro5 и witing и пробовать и пробовать снова, так что это ответ на мой собственный вопрос:

первые в entrys секции [плитка] может имеют разные имена, как это:

[tiles] 
    a=0,0,1,0,0 
    b=0,1,1,1,0 
    c=0,1,0,1,0 
    d=0,1,0,1,0 
    e=0,0,0,0,0 
[/tiles] 

затем код:

ALLEGRO_CONFIG*config_file=al_load_config_file("example.map"); 
vector<const char*>lines 
ALLEGRO_CONFIG_ENTRY** entry_iterator; 
const char* entry; 
entry=al_get_first_config_entry(config_file, "tiles", entry_iterator); 
while((entry=al_get_next_config_entry(entry_iterator))!=NULL){ 
     lines.push_back(al_get_config_value(config_file, "tiles", entry)); 
};