Autor Beitrag
Necroscope
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 05.03.07 23:01 
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.

ausblenden 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;        {die Felder können Spielsteintürme bis zu einer Höhe von 5 
                                          Steinen beinhalten und das Feld ist nicht ganz 
                                         quadratisch. Die Felder in den Ecken fehlen jeweils, daher "Benutzbar"}

      Benutzbar:Boolean;
      end;
    Tfarbe=(rot,gruen,gelb,blau,leer);   {Spielsteinfarben}

    Tspielerstatus = record
      reserve,verloren:integer;
      amZug:Boolean;
    end;


Nun müsste das Array Feld[1..64of 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 user profile iconChristian S.: Delphi-Tags hinzugefügt


Zuletzt bearbeitet von Necroscope am Di 06.03.07 16:44, insgesamt 1-mal bearbeitet
MrFox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 208

WIN 2000 Professional, Ubuntu 5.10
D3 Prof, D7 Pers, D2005 Pers, Java (Eclipse)
BeitragVerfasst: 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:

ausblenden 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

_________________
Das Leben auf der Erde mag zwar teuer sein, aber eine jährliche Rundreise um die Sonne ist gratis mit dabei.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10184
Erhaltene Danke: 1259

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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 Suche in: Delphi-Forum, Delphi-Library 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

_________________
There are 10 types of people - those who understand binary and those who don´t.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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:

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 user defined image oder user defined image klicken und den Titel ändern. Danke Dir!

Viele Grüße,
Peter
Necroscope Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
type XY = record
    Name:String;
    wert1, wert2: Integer
end;

dann wäre ein sinnvolles Protokoll vielleicht
ausblenden 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. :)

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.