2016-03-29 21 views
1

Ich habe eine Config-Datei, die eine Karte speichernAllegro 5 Schleife durch Konfigurationsdatei Werte mit dem gleichen Namen

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] 

Wie kann ich Schleife durch die [Kacheln] -Abschnitt seine Linien zu speichern (l) Werte in meinen Vektor?

Hinweis: Ich habe das allegro5-Tag, weil es Funktionen für das Laden von Konfigurationsdateien haben.

+0

Ich denke, Sie müssten feststellen, wann Sie aufhören zu lesen. Sieht aus wie der Satz '[/ Kacheln]' ist das Ende der Schleife. Also, wenn Sie eine Zeile lesen und es den Text enthält, brechen Sie aus der Schleife. –

+0

Was hat Ihre Frage mit dem Tag "allegro5" zu tun, wenn es darum geht, eine Konfigurationsdatei zu analysieren? –

+0

@Thomas Matthews Ich habe das allegro5-Tag gesetzt, weil ich ein Spiel in dieser Bibliothek mache und allegro5 Funktionen zum Laden von Konfigurationsdateien enthält, also brauche ich weder eigenen Code schreiben noch externe Bibliotheken importieren, um Konfigurationsdateien zu parsen. –

Antwort

1

wie Sie entdeckt haben, wird Allegro das letzte nehmen nur von eine Anzahl von Einträgen mit dem gleichen Schlüssel. Während Sie jeder Zeile einen anderen Schlüssel geben könnten, könnten Sie stattdessen Vorteil aus der Tatsache ziehen, dass die = Zuordnung ist optional:

[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] 

nun für jede Zeile der Daten in dem ‚Schlüssel‘ selbst gespeichert sind, und die 'Wert' ist ignoriert.

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

Tanks !, das ist sehr viel praktischer und nützlicher als meine Antwort, es sieht so aus, als ob du allegro5 kennst, ich denke, das allegro5-Tag scheint in Stack Overflow, Tank für deine Antwort nicht sehr aktiv zu sein. –

+0

Tatsächlich ist es nicht so aktiv wie in der Vergangenheit. Zurück dort im [forum] (http://www.allegro.cc) haben wir etwas mehr Aktivität :) – rlam12

0

Ich habe gefunden, wieder ein, dies zu tun nach einer gewissen Zeit des Lesens der allegro5 Referenz- und witing und zu versuchen, und zu versuchen, so eine Antwort meiner Frage ist:

zuerst die Einträge des [Kacheln] -Abschnitt kann haben unterschiedliche Namen, wie folgt aus:

[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] 

dann ist der Code:

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