【问题标题】:Allegro 5 loop through config file values with the same nameAllegro 5 循环遍历具有相同名称的配置文件值
【发布时间】:2016-03-29 19:34:33
【问题描述】:

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

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 标签是因为它有加载配置文件的功能。

【问题讨论】:

  • 我想您需要确定何时停止阅读。看起来短语 [/tiles] 是循环的结尾。因此,当您阅读一行并包含文本时,break 将退出循环。
  • 你的问题与allegro5标签有什么关系,当它是关于解析配置文件时?
  • @Thomas Matthews 我放了 allegro5 标签,因为我在那个库中制作游戏,allegro5 包含用于加载配置文件的函数,所以我不需要编写自己的代码或导入外部库来解析配置文件。

标签: c++ configuration-files 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]

现在每一行的数据都存储在'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;
}

【讨论】:

  • 坦克!,这比我的回答更方便和有用,看起来你知道 allegro5,我觉得 allegro5 标签在 Stack Overflow 中似乎不是很活跃,Tank 为你解答。
  • 确实,它不像过去那么活跃。回到forum,我们有更多的活动:)
【解决方案2】:

在阅读了 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));
};

【讨论】:

    猜你喜欢
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 2011-06-11
    • 2021-10-04
    • 2016-01-12
    • 1970-01-01
    相关资源
    最近更新 更多