Allegro 5 循环遍历具有相同名称的配置文件值

Allegro 5 loop through config file values with the same name

我有一个存储地图的配置文件

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]

我如何遍历 [tiles] 部分以将他的 lines(l) 值存储到我的向量中?

注意:我放了allegro5标签是因为它有加载配置文件的功能。

我在阅读 allegro5 参考资料并反复尝试和尝试之后找到了一个方法,所以我自己的问题有了答案:

首先 [tiles] 部分的条目可能有不同的名称,例如:

[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));
};

正如您所发现的,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]

现在每一行的数据都存储在 'key' 本身,而 'value' 是 忽略。

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;
}