Stringtables erstellen

Also, dieser Beitrag ist eine Erweiterung zum ersten was ich in diesem Forum gepostet habe:
Und zwar möchte ich wissen wie man Stringtables erstellt und wie man sie vernünftig anwenden kann.

Ich habe in einem Spiel (was auch in C geschrieben ist) schon Stringtables gesehen und habe gerade auch versucht, die irgendwie selbst zu verstehen, habs aber nicht hingekriegt...

Übrigens weiß ich nicht, ob der Begriff "Stringtable" im Programmerjargon überhaupt geläufig ist. Ich kenne das Wort nur aus eben dem Spiel.
 
Ich meine das in etwa so, dass wenn ich das so mache wie im Anhang funktioniert das nicht. Liegt vermutlich an der (von den Entwicklern selbstgemachten) Engine, aber das legt in etwa das Nahe was ich wissen möchte (denke ich).
 

Anhänge

  • stringtbl1.png
    stringtbl1.png
    3,7 KB · Aufrufe: 22
  • stringtbl2.png
    stringtbl2.png
    2,4 KB · Aufrufe: 23
Hallo

Ich meine das in etwa so, dass wenn ich das so mache wie im Anhang funktioniert das nicht.
Äh. Das verstehe ich nicht. Sorry.
Liegt vermutlich an der (von den Entwicklern selbstgemachten) Engine, aber das legt in etwa das Nahe was ich wissen möchte (denke ich).
Welche Entwickler? Welche Engine? Du solltest deine Fragen etwas konkreter stellen. Das ist sonst reine Wahrsagerei für uns.

Aber um es dennoch zu versuchen:
Was du da hast ist eine Übersetzungstabelle. Und das ist exakt das, was ich vorgeschlagen habe. Naja, vielleicht anders implementiert.
C++:
std::map<std::string, std::string> stringTable;

//Wert setzen:
stringTable["Bullets"] = "Kugeln";

//Oder, wenn's denn unbedingt mit Sonderzeichendelimiter sein muss
std::string ID = "$Bullets$";
ID.erase(ID.begin());
ID.erase(ID.end());
//Und dann wieder normal
stringTable[ID] = "Kugeln";

Falls du etwas anderes willst, solltest du schon ein bisschen konkreter werden.

Gruss
cwriter
 
Hallo Krokodilklemme,

nach deinen Bildern ist das schlicht nur eine Textdatei mit einer Liste von Strings. Da du ja offensichtlich den Quellcode zur Verfügung hast, suche die Stelle, in der diese Datei eingelesen wird. Dann findest du auch heraus, in welche Struktur diese Daten abgelegt werden und wie darauf zugegriffen wird.

Gruß
MCoder
 
Ich bin zwar kein Profi, aber ist das nicht C++?
Doch, ist es. Hast du einen guten Grund, darauf zu verzichten? C++ können die meisten Compiler und nimmt sehr viel mühsame Arbeit ab, gerade mit dem std namespace.

Du kannst dir die map aber auch selber basteln. Ist allerdings mühsam.
C++:
typedef struct StrPair
{
    char first[256];       //256 ist die maximale Länge. Falls es dynamischer sein muss, kannst du auch char* first; machen, dann musst du aber den Speicher selbst allozieren.
    char second[256];
};
StrPair* strPairArr = (StrPair*)malloc(100*sizeof(StrPair)); //100 dynamisch machen...
if(strPairArr == NULL)
{
    perror("ALLOCATION ERROR");
    return -1;
}

//Wert setzen
strcpy(strPairArr[0]->first, "Bullets");
strcpy(strPairArr[0]->second, "Kugeln");

//Wert finden
for(size_t i = 0; i < 100; i++) //Max value entsprechend anpassen
{
    if(strcmp(strPairArr[i]->first, "Bullets") == 0)
    {
        printf("Wert ist %s\n",strPairArr[i]->second);
        break;
    }
}
Wenn dynamische Grössen gewünscht sind: realloc() und einen size_t-Wert für die Grössenspeicherung benutzen. Aaaaaber: Wenn es irgendwie möglich ist: Erfinde das Rad nicht neu...

Gruss
cwriter

/EDIT:
Da du ja offensichtlich den Quellcode zur Verfügung hast, suche die Stelle, in der diese Datei eingelesen wird.
Scheint mir nicht C oder C++ zu sein. Ganz unwissend würde ich mal auf Java tippen.
/EDIT2:
http://www.objc.io/issue-16/swift-functions.html
Hat auch was mit Swift gemein. Hm. Oder einfach grässliche defines.
 
Zuletzt bearbeitet:
@cwriter Das Ding ist nur, das ich mich jetzt quasi schon auf C "spezialisiert" habe, weil mir C++ für den Anfang dann doch zu schwer war. Und ich bin mir ziemlich sicher, dass mein Quellcode in C ist, denn immerhin hieß die Datei, wo ich den Code herhabe, script.c
 
Dass es "script.c" heisst, lässt mich eben ein bisschen daran zweifeln, dass es reines C ist. C ist eine Programmiersprache, keine Skriptsprache...

Aber ansonsten: Dann machst du es eben in C. Geht ja auch. Du musst einfach mehr selbst machen. OOP hat gerade für Spiele grosse Vorteile.

Oder war in deinem Post eine Frage versteckt?

Gruss
cwriter
 

Neue Beiträge

Zurück