Ich habe mir heute mal die aktuelle Version vom 18.12.2008 heruntergeladen und unter Linux kompiliert. Das funktionierte auch soweit ganz gut, jedoch stürzte das Spiel mit einer Ausnahme ab.
Ich habe dann das Spiel im Debugger unter die Luppe genommen und festgestellt, dass die Funktionen, die für das Einlesen der Textdateien verantwortlich sind, einfach alles durchwinken, ob es nun Dateien, Verzeichnisse oder etwas anderes sind. std::ifstream arbeitet jedoch nur auf Dateien. Unter Linux kommt zudem hinzu, dass alle Verzeichnisse noch . sowie .. als Einträge haben. Ich habe das Problem beseitigt, so dass das Spiel nun auch unter Linux läuft. Im Release Beitrag sind die korrigierten Dateien heruterladbar.
Zudem habe ich noch eine Projektdatei für cmake hinzugefügt, so dass man es bequem kompilieren kann. cmake Dateien sind einfacher zu erstellen, als configure Skripte und haben zudem den Vorteil, dass man damit auch Projektdateien für Visual Studio, KDevelop, XCode und CodeBlocks neben den normalen Makefiles erstellen kann.
Geirroed
Auch wenn es vielleicht etwas unhöflich erscheint, dass ich hier gleich die große Quelltextkeule schwinge, möchte ich folgendes zu deinem bisherigen Werk anmerken:
Ich meine mich zu erinnern, dass du geschrieben hattest, dass du eher aus der C Schiene kommst. Das ist auch anhand des Codes gut zu erkennen.
1. Also prinzipiell ist es bei C++ so, dass jede Klasse in zwei Datein kommt. Jeweils eine h Datei, in der die Deklaration enthalten ist und eine cpp Datei, in der die Implementierung enthalten ist.
2. Es ist wichtig festzulegen, wie die Einrückung aussehen soll. Ob Tabs oder Leerzeichen, ist erstmal egal. Wichtig ist nur, dass wenn man Leerzeichen nimmt, die für jede Einrückstufe identisch sind. Also nicht einmal 6 Leerzeichen, dann wieder 4, dann nur noch 3.
3. Du hast überall struct benutzt. Das ist zwar in Ordnung, bei C++ nimmt man für Klassen aber eigentlich class. Das hat auch den Vorteil, dass man von außen nicht an die Eigenschaften rankommt, wie es bei structs üblich ist. Bei Klassen geht es darum, dass man nur über bestimmte Methoden, die auch Wertüberprüfen übernehmen, auf die Eigenschaften zugreifen darf. Sonst kann man prinzipiell von überall irgendwas an Werten in das jeweilige Objekt schreiben und man wundert sich nachher, warum das Programm nicht das macht, was es soll.
4. C-Stil und Java-Stil... Der C Stil mit _ ist in der Objektorientierung sehr unüblich. In den objektorientierten Sprachen hat sich die Kamelhöckerschreibweise durchgesetzt, die du bei Methodennamen nutzt (das Kleinschreiben des ersten Buchstabens ist Geschmacksache; Java schreibt es klein, C# groß) aber nicht bei Klassennamen. Da solltest du also auch eher, statt combat_stack CombatStack verwenden.
5. Bei Zeigern und Dateideskriptoren ist mir aufgefallen, dass du vergessen hast, den Speicher wieder freizugeben (bei manchen, nicht allen) und das du die Dateideskriptoren nicht schließt. Bei letztem kann man natürlich sagen, dass die eh am Ende der Funktion vernichtet werden. Sauber ist es trotzdem nicht.
Das wäre erstmal alles. Also bitte das ganze als konstruktive Kritik verstehen. Es ist nicht bösartig gemeint.