Autor Beitrag
Zlatan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 175



BeitragVerfasst: Di 22.02.11 17:34 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: 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

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: 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 user profile iconXion schon geschrieben hat in eine Datei.

Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
Zlatan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 175



BeitragVerfasst: Di 22.02.11 17:48 
Tut mir wirklich leid aber das kapier ich jetzt nicht :?:
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: 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: www.kuknet.de/tutorial1.pdf

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Di 22.02.11 18:04 
user profile iconXion hat folgendes geschrieben Zum zitierten Posting springen:
....Und das musst du in eine Datei reinschreiben (von Hand).
:rofl:
Wolln mal so nicht sein.
ausblenden 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       //schreiben der Ini
    Pini:= TIniFile.Create(Pfad und name der ini);
    try
       Pini.WriteInteger('Spiel''Level', Level);
    finally
       Pini.Free;
    end;
end;
////
var
   PIni: TIniFile;
begin       //lesen der  Ini
    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

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!

Für diesen Beitrag haben gedankt: Zlatan
KleinesPferd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 29



BeitragVerfasst: 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
ausblenden Delphi-Quelltext
1:
2:
3:
memo1.clear; //leert den text im memo
memo1.lines.add("4"); //fürs fertige 4. Level 
memo1.lines.safetofile("Dateiname.txt");

Zum auslesen machst du einfach beim Form1.onshow ->

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 23.02.11 16:14 
Moin!

user profile iconKleinesPferd hat folgendes geschrieben Zum zitierten Posting springen:
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

_________________
There are 10 types of people - those who understand binary and those who don´t.
KleinesPferd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 29



BeitragVerfasst: Mi 23.02.11 19:13 
Moderiert von user profile iconNarses: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51
Erhaltene Danke: 5



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



BeitragVerfasst: Mi 23.02.11 21:40 
Ist schon gut habe eine andere möglichkeit gefunden ohne eine datei zu erstellen :)