Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi typisierte Datei erstellen (https://www.delphipraxis.net/145092-typisierte-datei-erstellen.html)

KahPee 23. Dez 2009 13:50


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

s.h.a.r.k 23. Dez 2009 13:52

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.

KahPee 23. Dez 2009 13:59

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!

s.h.a.r.k 23. Dez 2009 14:05

Re: typisierte Datei erstellen
 
Hier gibts ein Tutorial für XML, wobei ich sagen würde, dass INI-Dateien leichter zu implementieren sind und für dein kleineres Projekt wohl einfacher zu handhaben wären.

Hier habe ich sogar ein Tutorial für INI-Dateien gefunden.

Und [url=http://www.delphi-treff.de/tutorials/datenspeicherung/typisierte-dateien/]hier noch was, wenn du unbedingt typisierte Dateien verwenden will ;)

KahPee 23. Dez 2009 14:24

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:
WriteInteger('Spieler1', 'Punkte', Spieler1.points); // Spieler1.points ist die Integervariable mit dem entsprechenden Wert
WriteInteger('Spieler2', 'Punkte', Spieler2.points);
Weiter Werte zu den Spieler könnte ich dann ja theoretisch auch noch hinzufügen:
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

sx2008 23. Dez 2009 15:01

Re: typisierte Datei erstellen
 
Zitat:

Zitat von KahPee
wie ist das dann mir überschreiben etc.

Überschrieben wird nur das, was du beim Speichern direkt ansprichst.
INI-Dateien werden beim Speichern automatisch erzeugt, falls sie noch nicht vorhanden sein sollten.
Hier ein Beispiel für eine INI-Datei:
Code:
[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
Wie du siehst ist diese Struktur viel flexibler als eine typisierte Datei.
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.

KahPee 23. Dez 2009 16:06

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

sx2008 23. Dez 2009 17:43

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: http://www.kuknet.de/tutorial1.pdf

KahPee 24. Dez 2009 07:08

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:
[Player1]
>[Games against Player2]
Anzahl=456
>[Games against Player3]
Anzahl=123
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.


mfg KahPee

himitsu 24. Dez 2009 08:06

Re: typisierte Datei erstellen
 
Zitat:

Zitat von KahPee
Kann man mehrere Sections verschachteln?

Nein, man könnte dieses aber notfalls im Programm "simulieren".
- 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 17:00 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz