JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=fda09984508222a35de6b0159be8b211Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Speichern einer Liste in einer Datei
Gehe zu Seite 1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 21.09.2003, 13:08    Titel: Speichern einer Liste in einer Datei Antworten mit Zitat

Ich habe jetzt eine Struktur die etwa so aussieht:

struct SHighscore
{
char Name[21];
int Score;
int Kills;
int Skill;
};

Die Struktur wird in einer dynamischen Liste 20mal gespeichert. Es soll eine Top 20 der besten Spieler entstehen. Wie speichert man nun diese Liste in einer Datei ab, bzw. wie ruft man sie wieder ab?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 21.09.2003, 13:14    Titel: Antworten mit Zitat

einfach reinschreiben?

for(int i=0;i<20;i++)
fwrite(&array[i],sizeof(array[i]),1,Datei);

for(int i=0;i<20;i++)
fread(&array[i],sizeof(array[i]),1,Datei);
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
abc_d
JLI Master Trainee


Alter: 35
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 21.09.2003, 13:16    Titel: Antworten mit Zitat

Also du packs das ganze in eine klasse:
Code:

class CClass
{
   public:
      //Gibt das den name von Element iNumber aus!
      void GetName(int iNumber,char *pName);
      //blablabla
   private:
      list<SHighscore*>HelloIAmAList;
}

So schreibst du das dann rein:

//Schreibt die Variable vom Typ CClass
fwrite(&Var,sizeof(CClass),1,pDataFile);

[edit]

verdammt zu langsam!
_________________
http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.

Never touch a running System - der Systemling


Zuletzt bearbeitet von abc_d am 21.09.2003, 13:19, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 21.09.2003, 13:18    Titel: Antworten mit Zitat

Pass auf:
Die Liste nennt sich "m_HighscoreList".

Deklariert als:
"list<SHighscore*> m_HighscoreList;"

In dieser Liste werden jetzt 20 Elemente vom Datentyp "SHighscore" (eine Struktur) gespeichert.

Ich habe es folgendermaßen probiert:

DateiHighscore = fopen("Highscore.dat", "wb");
fwrite(&m_HighscoreList,sizeof(m_HighscoreList),1,DateiHighscore);
fclose(DateiHighscore);


Er speichert nichts ab. Mit Strukturen muss man ja so abspeichern. Deshalb frag ich ja, wie das dann mit listen ist.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 21.09.2003, 13:20    Titel: Antworten mit Zitat

Iterier doch einfach durch die Liste und speichere alle Elemente einzeln ab. Oder überschreibe den <<-Operator und benutze Streams.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
abc_d
JLI Master Trainee


Alter: 35
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 21.09.2003, 13:25    Titel: Antworten mit Zitat

Ich mach es so (hat Hazel schon vorgeschlagen):

Ich hab hier eine Klasse geschrieben (nur ein prototyp noch nicht fertig)
Code:


//Klasse die die Kreaturen verwaltet
class CCreatureList
{
   public:
      void CleanTheList()
      {
      }
      void AddCreature(CCreature Creature)
      {
      }

      CCreature GetCreature(int iNumber)
      {
         return m_Creatures;
      }
      int GetNumberOfCreatures()
      {
         return m_NumberOfCreatures;
      }
   private:
                                //das hier wird noch eine liste (muss ich noch machen)
      CCreature m_Creatures;
      int m_NumberOfCreatures;
};


Und so schreibe ich es in die datei:
Code:

   //Datei öffnen wenn nicht offen
   if(pDataFile ==0)pDataFile=fopen(pFile,"rb+");

   //Holt die Anzahl der Kreaturen
   int iNumberOfCreatures=pCreatureList->GetNumberOfCreatures();

   //Schreibt die Anzahl der Kreaturen in die Datei
   fwrite(&iNumberOfCreatures,sizeof(int),1,pDataFile);

   //Geht die Kreaturen durch
   for(int i=0;i<iNumberOfCreatures;i++)
   {
      //Schreibt die Kreaturen in die Datei
      fwrite(&pCreatureList->GetCreature(i),sizeof(CCreature),1,pDataFile);
   }

_________________
http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.

Never touch a running System - der Systemling


Zuletzt bearbeitet von abc_d am 21.09.2003, 13:28, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 21.09.2003, 13:28    Titel: Antworten mit Zitat

Auf die Idee mit dem einzeln abspeichern bin ich auch schon gekommen, aber was ist, wenn ich jetzt noch eine Savegame anlegen will, die sagen wir mal 25 verschiedene Listen enthält und jede Liste eine unbestimmte menge an Elementen hat?
Also da find ich die Idee mit dem Anlegen einer Liste in einer Überstruktur besser. Für die Highscore könnte ich das bisschen ja umschreiben. Aber für den Rest des programmcodes für eine Savegame mitten im Spiel könnte müsste ich alles komplett umschreiben. Gibts da echt keinen direkten Befehl, um Listen abzuspeichern?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
abc_d
JLI Master Trainee


Alter: 35
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 21.09.2003, 13:33    Titel: Antworten mit Zitat

Wollte ich zuerst auch, aber niemand konnte mir helfen.

Ich habe eine große CLevel klasse die speichert alle Verschiedenen Sachen: Level, Kreaturen, Stuff, usw.

und eine Klasse die hat verschiedene funktionen um das zeug abzuspeichern!

Neiiiiiiiiiiin!!! Ich habe gerade gemerkt das ich die Level.cpp versehentlich gelöscht habe!! Jetzt muss ich neu anfangen Sad
_________________
http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.

Never touch a running System - der Systemling
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
abc_d
JLI Master Trainee


Alter: 35
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 21.09.2003, 13:43    Titel: Antworten mit Zitat

Kennt jemand ein gutes Daten-Wiederherstellungsprogramm?
_________________
http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.

Never touch a running System - der Systemling
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
bladegool
JLI'ler



Anmeldedatum: 26.08.2003
Beiträge: 127
Wohnort: München
Medaillen: Keine

BeitragVerfasst am: 21.09.2003, 13:47    Titel: Antworten mit Zitat

Wers glaubt ..... Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 21.09.2003, 13:53    Titel: Antworten mit Zitat

Wenn du zu denen gehörst, die direkt den Papierkorb leeren, nachdem se ein paar Dateien gelöscht haben, dann hast du die Funktion des Papierkorbs nicht verstanden. Ich hab bisher kein Datenwiederherstellungsprogramm gebraucht, aber du kannst ja ein paar suchbegriffe bei Downloadseiten oder Tauschbörsen eingeben.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
abc_d
JLI Master Trainee


Alter: 35
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 21.09.2003, 14:00    Titel: Antworten mit Zitat

Ich lösche mit Shift-Entf (löscht komplett ohne papierkorb)Ist übrigens schon eine weile her!

Wenn eine Datei gelöscht wird wird an den anfang eine 0 geschrieben das heißt sie ist gelsöcht! (Sie wird nicht überschrieben) Wenn man jetzt keinen speicherplatzt mehr hat wird die datei überschrieben! Ansonsten kann man sie mit speziellen programmen zurückholen! Nicht mal beim formatieren wird etwas richtig gelöscht!

Bei Hausdurchsuchungen wird übrigens auch nach gelöschten daten gesucht!
_________________
http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.

Never touch a running System - der Systemling
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 21.09.2003, 15:14    Titel: Antworten mit Zitat

BlackLordOfDragons, kannst du deine Methode bitte mal im Zusammenhang mit meiner Highscorelist zeigen? Ich habe es mit der Strukturmethode von dir probiert. Aber irgendwie habe ich das Gefühl, dass er nur Das "Gerüst" der List abspeichert, aber nicht die Elemente.

Ich habe es so probiert:

SHighscore HighscoreList;
...
fwrite(&HighscoreList,sizeof(SHighscore),1,DateiHighscore);

Eigentlich so, wie du es vorgeschlagen hast.

Ich habe es auch so probiert:

fwrite(&HighscoreList,sizeof(HighscoreList),1,DateiHighscore);
In beiden Fällen wurden nur 12 Bytes abgespeichert. Aber die schienen leer zu sein. Beim Abrufen der Datei kam nix zurück.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
abc_d
JLI Master Trainee


Alter: 35
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 21.09.2003, 15:41    Titel: Antworten mit Zitat

Ich glaube du kannst Listen nicht zusammen abspeichern.
_________________
http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.

Never touch a running System - der Systemling
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 21.09.2003, 17:58    Titel: Antworten mit Zitat

Was soll das jetzt heißen? Es zunächst nur um eine lächerliche Liste.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2, 3  Weiter
Seite 1 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum