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; var aSpielerHS:array[0..1] of TSpielerHS; 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;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;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;var i,check : word; begin assignFile(Highscore,'Highscore.hgs'); check:=0;
for i := 1 to maxHS-1 dobegin 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 begin write(Highscore,Highscorealt[i]); inc(i); end; closefile(Highscore);
end;
procedure TFHighscore.WriteInStringGrid();var i,a:integer; 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 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. |