![]() |
typisierte Datei erstellen
Hallo,
ich habe ein Spiel programmiert und möchte dort jetzt eine Statistikfunktion integrieren. Dazu muss das Programm bestimmte Informationen auch noch nach dem Schließen des Programms abspeichern. Ich habe mir gedacht, dass man dazu am besten eine typisierte Datei anlegt. Nun allerdings die Frage, wie mach ich das generell und vorallem was muss ich beachten. Ich werde in der Statistikfunktion auch wieder Datensätze auslesen müssen und vorallem bestimmte Datensätze in der Datei heraussuchen müssen. Wäre nett wenn mir jemand da einen Tipp geben könnte. Danach will ich auch noch das Abspeichern eines Spielstandes möglich machen. Das wäre dann das 2. Projekt. Da wäre dann die Frage wie man für jedes zuspeichernde Spiel eine eigene Datei anlegen kann. Die dann auch bei einem "gespeichertes Spiel öffnen"-Dialog wieder geöffnet werden können. Neben der einzelnden Speicherung sind hier die Dialogmöglichkeiten für das Abspeichern und wieder öffnen interessant. Aber wie gesagt, ist dieses Projekt erstmal sekundär ;) mfg KahPee |
Re: typisierte Datei erstellen
Schau dir doch mal INI-Dateien oder XML-Dateien an. Diese eigenen sich heutzutage besser und sind auch von anderen Programmen ohne Probleme lesbar.
|
Re: typisierte Datei erstellen
Aber dann muss ich doch immer ne ganze Datenbank mit mir rumschleppen. Ich habe gelesen, dass typitisierte Dateien resourcensparender sind. Außerdem ist das Spiel sehr einfach insofern sind das sowieso nicht viele Informationen!
|
Re: typisierte Datei erstellen
![]() ![]() Und [url=http://www.delphi-treff.de/tutorials/datenspeicherung/typisierte-dateien/]hier noch was, wenn du unbedingt typisierte Dateien verwenden will ;) |
Re: typisierte Datei erstellen
Inis sehen vorallem für den ersten Teil schon mal sehr interessant aus. Trotzdem noch ein paar Fragen.
1. Wie muss ich die Dateien erstellen? Werden die beim aller ersten Aufrufen erstellt? wie ist das dann mir überschreiben etc. 2. Wenn ich jetzt bei einem Spiel zwischen Spieler 1 und Spieler 2 das Ergebnis speichern will könnte das ja so gehen:
Delphi-Quellcode:
Weiter Werte zu den Spieler könnte ich dann ja theoretisch auch noch hinzufügen:
WriteInteger('Spieler1', 'Punkte', Spieler1.points); // Spieler1.points ist die Integervariable mit dem entsprechenden Wert
WriteInteger('Spieler2', 'Punkte', Spieler2.points);
Delphi-Quellcode:
WriteInteger('Spieler1', 'Spielanzahl', anzahl);
Jetzt haben wir ein Spiel zwischen Spieler1 und Spieler3. Wie kann ich das dann berücksichtigen. Spieler 2 soll nicht überschrieben werden. Am schwersten stellt sich jetzt da, dass die Spieler nicht unbedingt in reihenfolge sind weil die im Spiel nicht Spieler 1, Spieler2, Spieler3 heißen, sondern immer den entsprechenden Spielernamen haben. WIe kann ich jetzt einen entsprechenden Datensatz raussuchen? Das ist generell mein größtes Problem :-/. Bei einer Ini ist das recht unübersichtlich, da der komplette Datensatz zu einem Spieler nicht recordartig an einer Stelle abgespeichert ist |
Re: typisierte Datei erstellen
Zitat:
INI-Dateien werden beim Speichern automatisch erzeugt, falls sie noch nicht vorhanden sein sollten. Hier ein Beispiel für eine INI-Datei:
Code:
Wie du siehst ist diese Struktur viel flexibler als eine typisierte Datei.
[Settings]
Display=1024,768 UseDirectX=0 CheatCodes=1 SplashScreen=0 ShowBlood=1 MaxFrame=25 [Players] 1=Tommy 2=Looser 3=DP [Player_Tommy] Point=7950 GamesPlayed=19 LastLevel=6 Checksum=EF45 [Player_Looser] Point=350 GamesPlayed=278 LastLevel=2 Checksum=09A4 Das einzigste Problem als Spieleprogrammierer ist, dass man die Werte leicht mit einem Editor verfälschen kann. Wenn du ein richtig tolles Games hast, dann kannst du darüber Gedanken machen und die Werte mit eine Prüfsumme (Checksum im Beispiel) absichern. |
Re: typisierte Datei erstellen
Wie würde ich jetzt eine Abfrage machen ob es einen bestimmten Spieler schon gibt? D.H. ich vergleiche eine Name die die Variable des Spielernamens enthält mit der Liste unter "players".
mfg KahPee |
Re: typisierte Datei erstellen
Mit der Methode .SectionExists('Player_'+spielername) kannst du prüfen, ob schon ein Abschnitt für den Spieler vorhanden ist.
Mehr über TIniFile: ![]() |
Re: typisierte Datei erstellen
wow. Das ist nen super Tut!
Vielen Dank, damit sollte ich zumindest den ersten Teil selber hinebkommen. Eine letzte Frage habe ich aber noch: Kann man mehrere Sections verschachteln? Um sowas zu erreichen:
Delphi-Quellcode:
Ich vermute fast, dass das nicht möglich ist :-/ aber wenn ich auch records in eine .ini schreiben kann würde sich das Problem ja auch lösen. Naja ich lass mich mal überraschen was für Ideen ihr habt um obiges Prob zu lösen.
[Player1]
>[Games against Player2] Anzahl=456 >[Games against Player3] Anzahl=123 mfg KahPee |
Re: typisierte Datei erstellen
Zitat:
- jede Section bekommt ein weiteres Feld, wo dessen "Parent" drin steht und in der INI wird dann alles nur unverschachtelt gespeichert. Dafür wäre wiederum XML geeignet. und sowas ginge auch noch
Code:
[Player1]
Games against Player2=456 Games against Player3=123 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz