Autor Beitrag
V!P3R
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 151



BeitragVerfasst: So 14.10.07 16:06 
hi
ich hab folgende frage:

wie kann ich strings, Integer usw speichern, sodass sie beim nächsten start der exe wieder zu sehen sind??

ich habe keine ahnung, aber ich denke delphi muss sie irgentwie in ne txt oda so speichern und beim nächsten start der exe wieder aufrufen

aber wie mache ich das??

MfG


Moderiert von user profile iconChristian S.: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 14.10.2007 um 17:12
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: So 14.10.07 16:16 
Hi :welcome:

ganz aktuell dazu: www.delphi-forum.de/viewtopic.php?t=77339

Statt Reset nimmst du ReWrite und statt ReadLn, WriteLn (ist ja logisch ^^).

Xion

_________________
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)
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: So 14.10.07 16:22 
Hi,
oder du nimmst Ini Dateien. Einfach mal die SuFu mehmen. Sonst lies dir mal das hier durch.

MfG
Regan
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 14.10.07 22:18 
Moin und :welcome: im Forum!

Zum Stichwort "Highscore" haben wir da auch was in der Library. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Makaan
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 19.10.07 18:28 
Ich habe da vor einiger Zeit mal etwas geschrieben. Es ging um ein Spiel und da sollte eben auch eine Highscore mit rein. Ist vielleicht nicht die beste Lösung aber es funktioniert einwandfrei.
(Zum Sortieren habe ich eine Variante von Bubblesort benutzt)
PS:Dem String im Record unbedingt eine Maximale Zeichenanzahl zuweisen, sonst bekommt man eine Fehlermeldung.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
unit UHscore;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;
Type  TSpielerHS = record
        Punktzahl   : Integer;
        Spielername: String[50];
        end;
type
  TFHighscore = class(TForm)
    SgHS: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure WriteInStringGrid();
    procedure HSeinlesen();
    procedure HSanzeigen();
    procedure Dateischreiben();
    procedure FormDestroy(Sender: TObject);
    procedure sortieren;
  end;
procedure punkteeinlesen(Spieler1p,Spieler2p:integer; Spieler1n,Spieler2n:string);



const maxHS = 5001; //maximale Anzahl an Einträgen in der Highscore
var
  aSpielerHS:array[0..1] of TSpielerHS;//Die beiden Aktuellen Spieler
  FHighscore: TFHighscore;
  Highscore: File of TSpielerHS;
  Highscorealt: array[0..maxHS] of TSpielerHS;

implementation

{$R *.dfm}

procedure TFHighscore.sortieren;
var a,i,j,MerkeP:integer;
    MerkeName:string[50];
begin
a:=0;
i:=0;
j:=1;
while highscorealt[a].Spielername<>'' do
inc(a);

repeat
  repeat
   if (highscorealt[i].Spielername=highscorealt[j].spielername) and (highscorealt[j].Spielername<>'PointsAdded') and (highscorealt[i].Spielername<>'') and (i<>j) then
   begin
     highscorealt[i].Punktzahl:=highscorealt[i].Punktzahl+highscorealt[j].punktzahl;
     highscorealt[j].Spielername:='PointsAdded';
     highscorealt[j].Punktzahl:=-1;
     inc(j);
   end
   else
   inc(j);

  until (highscorealt[j].Spielername='');
inc(i);
j:=1;
until (highscorealt[i].Spielername='');
    

  for i := a-2 downto 0 do
    for j := 0 to i do
      if (highscorealt[j].Punktzahl<highscorealt[j+1].Punktzahl) then
       begin
         MerkeP:=Highscorealt[j].Punktzahl;
         MerkeName:=Highscorealt[j].Spielername;

         Highscorealt[j].Punktzahl:=Highscorealt[j+1].Punktzahl;
         Highscorealt[j].Spielername:=Highscorealt[j+1].Spielername;

         Highscorealt[j+1].Punktzahl:=MerkeP;
         Highscorealt[j+1].Spielername:=Merkename;
       end;
i:=0;
repeat
while (highscorealt[i].Spielername<>'PointsAdded') and (i<maxHS) do
inc(i);

if highscorealt[i].Spielername='PointsAdded' then
begin
  highscorealt[i].Spielername:='';
  highscorealt[i].Punktzahl:=0;
  inc(i);
end;

until (i>=maxHS) or (highscorealt[i].Spielername='');

    FHighscore.HSanzeigen;
end;

procedure TFHighscore.HSeinlesen;//wird beim Programmstart aufgerufen, schreibt Werte von Datei in Highscorealt
var i : word;
begin
  assignFile(Highscore,'Highscore.hgs');

  if fileexists('Highscore.hgs') then
  reset(Highscore)
  else
  rewrite(Highscore);
  i:=0;

  if Filesize(Highscore) > 0 then begin
    repeat
      read(Highscore,Highscorealt[i]);
      inc(i);
    until (i>=MaxHS) or (EOF(Highscore));
  end;
  closefile(Highscore);

end;

Procedure TFHighscore.HSanzeigen;//Schreibt die Werte von Highscorealt in das StringGrid (beim Programmstart)
var i: word;
begin
  i:=1;

  repeat
     SgHS.Cells[1,i] :=Highscorealt[i-1].Spielername;
     SgHS.Cells[2,i] :=InttoStr(Highscorealt[i-1].punktzahl);
     inc(i);
  until i>=maxHS;
end;


procedure TFHighscore.dateischreiben;//Beim Beenden des Programms ausgeführt 
var i,check : word;
begin
  assignFile(Highscore,'Highscore.hgs');
  check:=0;



for i := 1 to maxHS-1 do//schreibt alle Werte die nun im StringGrid stehen in Highscorealt
begin
  highscorealt[check].Spielername := SgHS.Cells[1,i];
  highscorealt[check].Punktzahl := strtoint(SgHS.Cells[2,i]);
  inc(check);
end;

i:=0;

  rewrite(Highscore);

      while (i<=MaxHS) and (highscorealt[i].Spielername<>'') do//schreibt Highscorealt in die Datei Highscore.hgs
      begin
        write(Highscore,Highscorealt[i]);
        inc(i);
      end;
    closefile(Highscore);


end;



procedure TFHighscore.WriteInStringGrid();//wird nach jedem beendeten Spiel aufgerufen und fügt ans ende des StringGrids
var i,a:integer;                          //die Namen und Punktzahlen der Spieler an
begin
a:=1;
  while SgHS.Cells[1,a]<>'' do  begin
    inc(a);
  end;

for i:=0 to 1 do
  begin
    SgHS.Cells[1,a]:=aSpielerHS[i].Spielername;
    SgHS.Cells[2,a]:=inttostr(aSpielerHS[i].Punktzahl);
    inc(a);
  end;



end;

procedure punkteeinlesen(Spieler1p,Spieler2p:integer; Spieler1n,Spieler2n:string);
begin                   //Liefert die Spielwerte aus der Hauptunit
  aSpielerHS[0].punktzahl:=Spieler1p;
  aSpielerHS[0].Spielername:=Spieler1n;

  aSpielerHS[1].punktzahl:=Spieler2p;
  aSpielerHS[1].Spielername:=Spieler2n;
end;

procedure TFHighscore.FormCreate(Sender: TObject);
var i : integer;
begin

  SgHS.Cells[1,0]:='Spielername';
  SgHS.Cells[2,0]:='Punkte';

    for i := 1 to SgHS.rowcount do
    SgHS.Cells[0,i]:=inttostr(i)+'. Platz';
    FHighscore.sortieren;

  end;

procedure TFHighscore.FormDestroy(Sender: TObject);
begin
FHighscore.dateischreiben;
end;

end.

Ist evtl. nicht sehr übersichtlich (unbedingt Kommentare lesen, da steht ne kleine beschreibung was der Programmabschnitt eigentlich tut) aber ich hoffe das hilft weiter.