max28
Grünschnabel
Einen schönen guten Abend zusammen.
Vielleicht kennt noch jemand das etwas ältere Spiel "Alien vs. Predator2".
Ich arbeite z.Z. an einem kleinen Programm, welches einem die Handhabung mit den *.rez
Dateien vereinfachen soll.
Theoretisch funktioniert mein Programm schon, allerdings wird es sicherlich viele Fehler haben und teilweise umständlich programmiert sein, da dies mein erstes wirkliches C++ Programm ist und ich hab mir alle Funktionen mehr oder weniger aus dem Internet zusammengesucht.
Mein Programm musste ich in 2 kleine Programme aufteilen, das erste ist dafür da eine Konfigurationsdatei zu erstellen, in Form eines *.ini Dokumentes.
Und das 2. Programm liest die Konfigurationsdatei aus, speichert den Inhalt in einer Variabel und fügt es als Parameter zu einem längeren Befehl hinzu, mit welchem dann letztendlich das Spiel gestartet werden soll.
Soweit funktioniert es. Allerdings ist diese Form nicht wirklich benutzerfreundlich, schöner wäre es lediglich ein Programm zu haben, welches den Benutzer beim ersten ausführen (oder wenn die config Datei leer ist) fragt, ob er eine neue erstellen möchte.
Wenn die Konfigurationsdatei angelegt wurde (wobei jeder mögliche Parameter eine Zeile darstellen soll) wäre es praktisch wenn der Benutzer beim abermaligen Start des Programmes, ein Auswahlmenü angeboten bekommt, welchen Parameter, sprich welche Zeile er mit dem Spiel laden möchte, oder ob er das Spiel ohne weitereParameter starten möchte.
Ich glaube das hört sich alles viel komplizierter an, als es eigentlich ist.
Leider weiß ich viele Sachen nicht, wie z.B. lese ich einzelne Zeilen aus einer Textdatei, oder wie erstelle ich ein funktionierendes Auswahlmenü mit case / switch Anweisungen.
Hier mal der Code meiner beiden Programme, ich bin für jeden Tip dankbar.
Vielen Dank schonmal und schönen Gruß:
Max
Code:
#include <windows.h>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <conio.h>
using namespace std;
int main (int argc, char *argv[])
{
FILE* config;
config = fopen("config.ini", "a");
fclose(config);
char inc[55];
cout<<"Konfigurationseditor -\n\n";
cout << "Bitte kompletten *.rez Namen angeben der automatisch mit geladen werden soll \nz.B. \"-rez avp2league.rez -rez test.rez\"\noder \"-rez maps -rez custom/blah.rez.\"\nENTER um das Programm zu beenden.\n\nDeine Eingabe: ";
cin.get (inc, 54);
fstream f;
f.open("config.ini", ios::out);
f << inc << endl;
f.close();
return 0;
}
Code:
#include <windows.h>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <conio.h>
using namespace std;
int main (int argc, char *argv[])
{
FILE* config;
config = fopen("config.ini", "a");
fclose(config);
std::fstream FStream;
FStream.open ("config.ini", std::ios::in);
/* Überflüssige Fehlerroutine?
if (!FStream) {
cout << "Config Datei nicht gefunden...\nDruecke Taste um das Programm zu beenden." << ends;
getch(); exit(2); } */
{
FStream.seekg(0, std::ios::end);
unsigned long FileSize = std::streamoff(FStream.tellg());
FStream.seekg(0, std::ios::beg);
char *Buffer = new char [FileSize+1];
// Ganze Zeile in das char-Array
FStream.getline(Buffer,FileSize);
// Wenn Zeile leer ist ...
if (FileSize == 0) {
// menu
cout<<"- Loader -\n\n";
cout<<"Es wurde keine Konfiguration gefunden... \n";
cout<<"bitte Configurator starten.\n\n";
cout<<"Programm verlassen: ";
getch(); exit(2); }
Buffer [FileSize] = '\0';
FStream.close ()
ostringstream os;
os << "lithtech.exe" << " -windowtitle \"avpII\" -rez AVP2 -rez AVP2.REZ -rez SOUNDS.REZ -rez AVP2L.REZ -rez AVP2DLL.REZ -rez AVP2P.REZ -rez AVP2P1.REZ -rez MULTI.REZ -rez ALIEN.REZ -rez MARINE.REZ -rez PREDATOR.REZ " << " " << Buffer << " +DisableMusic 0 +DisableSound 0 +DisableMovies 1 +DisableJoystick 1 +EnableTripBuf 1 +DisableHardwareCursor 0";
// Programm mit Parametern starten
system( os.str().c_str() );
/* Gesamten ostreamstring ausgeben
cout << os.str().c_str(); */
delete [] Buffer;
}
return 0;
}
Zuletzt bearbeitet: