Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Speichern
Zlatan - Di 22.02.11 17:34
Titel: Speichern
Nehmen wir an ich habe ein spiel mit mehreren leveln (jedes Level hat eigene form)
Ich wollte einen button erstellen, dass man nach level 5 abspeichern kann
dass heißt wenn ich morgen das programm starten würde, würde ich mit level 6 anfangen.
Geht das und Wie?
Xion - Di 22.02.11 17:41
Du kannst z.B. Level=6 speichern. Wenn du das lädst, dann weißt du, dass 6 der nächste Level wäre.
Dazu musst du ne Datei anlegen. Entweder ne TIniFile z.B, oder per AssignFile
ALF - Di 22.02.11 17:47
Oder Du Speicherst automatisch wenn der Level 5 geschafft ist. So wie es viele andere Spiele auch machen :wink: Diese Info packst Du, wie
Xion schon geschrieben hat in eine Datei.
Gruss Alf
Zlatan - Di 22.02.11 17:48
Tut mir wirklich leid aber das kapier ich jetzt nicht :?:
Xion - Di 22.02.11 17:52
Es gibt keine Funktion "Speichern" in Delphi. Ich glaub dir ist das unklar, weil du gar nicht weißt, was speichern eigentlich heißt ;)
Was du willst ist ein Arbeitsspeicher-Abbild, so das beim nächsten Start das Programm exakt so startet, wie es beenden wurde. Das ist wohl eher nicht so sinnvoll (dann würde ja jede Word Datei das komplette Word-Programm enthalten).
Du musst also was Speichern, damit dein Programm sich selbst wieder richtig konfigurieren kann. Dafür reicht es ja, dass du sagst, welche Form angezeigt wurde z.B. Diese zeigst du dann wieder an, wenn man das Programm startet. Und das musst du in eine Datei reinschreiben (von Hand).
Tutorial zu TIniFile:
http://www.kuknet.de/tutorial1.pdf
ALF - Di 22.02.11 18:04
Xion hat folgendes geschrieben : |
....Und das musst du in eine Datei reinschreiben (von Hand). |
:rofl:
Wolln mal so nicht sein.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| var PIni: TIniFile; begin Pini:= TIniFile.Create(Pfad und name der ini); try Pini.WriteInteger('Spiel', 'Level', Level); finally Pini.Free; end; end; var PIni: TIniFile; begin Pini:= TIniFile.Create(Pfad und name der ini); try level:= Pini.ReadInteger('Spiel', 'Level', ''); finally Pini.Free; end; end; |
als Beispiel!
Hoffe Du kannst damit was anfangen :wink:
Gruss ALf
KleinesPferd - Mi 23.02.11 16:07
ALFs Vorschlag ist einer der elegantereren ;)
Eine anschaulicherere Alternative wäre ein TMemo einzubinden. Dessen Inhalt kannst du mit memo1.lines.safotofile("Dateiname.txt") speichern und genauso mit loadfromfile("Dateiname") wieder laden.
Wenn du nun ein Level erfolgreich fertig hast, machst du
Delphi-Quelltext
1: 2: 3:
| memo1.clear; memo1.lines.add("4"); memo1.lines.safetofile("Dateiname.txt"); |
Zum auslesen machst du einfach beim Form1.onshow ->
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| if fileexists("Dateiname") then begin memo1.lines.loadfromfile("Dateiname"); if memo1.lines.count>0 then try level:=strtoint(memo1.lines[0]); except level:=0; end; |
Bei ALFs Source würde ich in Zeile 17 level:= Pini.ReadInteger('Spiel', 'Level', '
0'); eintragen. Somit hat die Variable level immer einen definierten Wert.
Desweiteren solltest du Aufpassen,
ich GLAUBE unter Vista und W7 hat man als normaler User keine Schreibrechte im Ordner Dokumente und Einstellungen, sowie im Ordner Programme oder Windows... So als Hinweis wo du die Datei denn nun speichern magst.
Grüße
Narses - Mi 23.02.11 16:14
Moin!
KleinesPferd hat folgendes geschrieben : |
Eine anschaulicherere Alternative wäre ein TMemo einzubinden. |
Das mag zwar anschaulich sein, aber wenig zu empfehlen. Damit missbrauchst du eine visuelle Komponente für die Datenhaltung. :? Das Gleiche erreicht man auch mit z.B. einer TStringList, aber ohne den Overhead der GUI-Kompo. :idea:
cu
Narses
KleinesPferd - Mi 23.02.11 19:13
Moderiert von
Narses: Komplett-Zitat des letzten Beitrags entfernt.
Das ist vollkommen Richtig. Deswegen habe ich auch ALFs Vorschlag präferiert.
Und eine reine TStringList auch auch nicht sehr anschaulich.
Und wenn es um das Programm geht, wo die Maus kleine Gänge langeschoben wird, und eine Kollisionsabfrage anhand von Panels gemacht werden, oder Buttons, da spielt der Overhead auch nimmer eine große Rolle.
Sauber ist es nicht, schön auch nicht. Aber seeeeehr anschaulich :lol:
Grüße
gnomecoder - Mi 23.02.11 21:13
du könntest auch über eine Verschlüsslung nachdenken. Kann ja auch ganz simpel sein.
Wenn da eine ini datei mit dem inhalt Level=10 zb. liegt, könnte man leicht schummeln.
nur so als tipp ;)
Zlatan - Mi 23.02.11 21:40
Ist schon gut habe eine andere möglichkeit gefunden ohne eine datei zu erstellen :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!