Entwickler-Ecke
Dateizugriff - Speichern eines Arrays von Verbunden mit integriertem Array
Necroscope - Mo 05.03.07 23:01
Titel: Speichern eines Arrays von Verbunden mit integriertem Array
Für ein Informatikprpjekt haben wir ein Brettspiel nachprogrammiert.
Ich wollte nun die FUnktion einbauen, das SPiel zu speichern und später wieder neu laden zu können.
Dazu müssten folgende Dinge gespeichert werden.
Das Brett hat 64 Felder. Wir haben einen Datentyp TSpielfeld.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| TSpielfeld = record Position:TPoint; Ebene:array[1..5]of Tfarbe; Benutzbar:Boolean; end; Tfarbe=(rot,gruen,gelb,blau,leer);
Tspielerstatus = record reserve,verloren:integer; amZug:Boolean; end; |
Nun müsste das
Array Feld[1..64] of TSpielfeld und Spielerstatus von Spieler1,SPieler2,SPieler3 und SPieler4 sowie 2 Boolean gespeichert werden. (Boolean: THAnz,VierSp)
Das Problem was mich am meisten beshcäftigt ist, dass nach erfolgreichem Laden Feld[1..64] mit dem gespeicherten Wert abgeglichen wird.
Meine makabren und Source-vergewaltigenden Verscuhe möchte ich euch hier gar nciht erst posten, darum bitte ich um komplett neue Ideen.
Moderiert von
Christian S.: Delphi-Tags hinzugefügt
MrFox - Di 06.03.07 00:22
Um das Spiel zu speichern, würde ich das ganze Array in einen Stream (TFileStream) packen.
Für TSpielfeld würde ich eine Methode "WriteToStream(stream: TStream)" einführen, die dann alle Daten in den Stream
schreibt. Beim Speichern wird dann das ganze Array durchlaufen und jedes Spielfeld in den Stream geschrieben.
In der Methode WriteToStream werden die Daten so in etwa in den Stream geschrieben:
Delphi-Quelltext
1:
| stream.Write(Position, sizeof(Position)); |
Zum Laden braucht man dann noch eine "ReadFromStream" Funktion mit der man das Umgekehrte wie beim Speichern macht.
Mit den Spielern kann man ähnlich verfahren. Und für die Eigenschaft Ebene des Spielfelds muss man natürlich auch nochmal jede Ebene einzeln durchlaufen.
Mfg Julian
Narses - Di 06.03.07 01:28
Moin!
In diesem speziellen Fall scheint mir eine INI-Datei sicher auch eine gute Lösung zu sein. Such mal nach
TINIFILE, gibt´s genug Source zu. ;) Hat nämlich den Vorteil, dass es leichter zu debuggen ist (was nicht ganz unwichtig ist, wenn man mit FileIO noch nicht soo firm ist... :D)
Ach ja: irgendwie kann ich mit dem Titel dieses Topics nicht wirklich was anfangen... :?!?:
cu
Narses
jasocul - Di 06.03.07 09:09
Hallo,
bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den
Richtlinien [
http://www.entwickler-ecke.de/richtlinien.html]:
| 1.2 Beiträge: |
| Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...] |
Einfach oben bei Deinem ersten Beitrag auf

oder

klicken und den Titel ändern. Danke Dir!
Viele Grüße,
Peter
Necroscope - Di 06.03.07 22:16
Ja danke erstmal für die Hilfe
Jetzt noch ne andere Frage
Wenn ich per Netzwerkmodus 2 dieser Feld Variablen vershcicken will, wie mach ich das am besten?
Also Auswahl und Zioel damit der dann auf dem anderen Computer nen Zug macht
JayEff - Di 06.03.07 22:43
Dazu musst du dir ein Protokoll schreiben... Aber grundsätzlich gilt:
Das hat nichts mit der ersten Frage zu tun, darum: Neue Frage - Neuer Thread, bitte! :mahn: Das hat den Sinn, dass ein Suchender nicht lauter "Ich hab 6 Fragen:" und "537 Probleme, bitte helft!" Themen findet ;)
Der Vollständigkeit halber trotzdem: Ein Protokoll ist in dem Fall eine Regel, nach der du Nachrichten überträgst, die dein Programm auslesen kann. Hast du zum Beispiel einen Record wie den Folgenden:
Delphi-Quelltext
1: 2: 3: 4:
| type XY = record Name:String; wert1, wert2: Integer end; |
dann wäre ein sinnvolles Protokoll vielleicht
Quelltext
1:
| #XY: $Name="DiesIstDerName" $wert1="123" $wert2="321"# |
mit # machst du klar, dass nun eine Nachricht an dein Programm folgt, XY sagt, welcher Record übertragen wird. $ sagt: jetzt kommt ein Variablenname! = sagt: nun kommt der Wert der Variable! und das abschließende # sagt: Ende der Übertragung.
Die Auswertung musst du selbst programmieren, natürlich ;)
Gut wäre es, wenn du ein neues Thema erstellen würdest, das diese Frage behandelt, und dann meinen Post hier zitieren würdest. Das würde der Übersichtlichkeit sehr beitragen. :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!