Wir haben im Rahmen eines Schulprojektes die Aufgabe bekommen ein Programm zu schreiben. Wir haben uns für das Spiel PingPong entschieden und ich habe in der Gruppe die Aufgabe eine Highscore zu programmieren.
Diese muss bis spätestens Montag fertig sein und ich hänge fest.
Mein Problem ist, wie ich in der Highscore jetzt
1. die Punkte von gleichnamigen Spielern addiere (wenn man z. B. 10 Punkte hat und ein spiel mit 3 punkten beendet soll man in der Highscore dann 13 Punkte haben und nicht 2 einträge mit 10 und mit 3 punkten)
2. nach Punkten sortiere, sodass der mit den meisten Punkten ganz oben steht.
Habt ihr vielleicht einen Vorschlag wie man das gescheit lösen könnte?
Vielen Dank schonmal im Vorraus.
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:
| 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); end; procedure punkteeinlesen(Spieler1p,Spieler2p:integer);
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.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,s: word; begin i:=1; s:=0; repeat SgHS.Cells[1,i] :=Highscorealt[s].Spielername; SgHS.Cells[2,i] :=InttoStr(Highscorealt[s].punktzahl); inc(i); inc(s); until i>=maxHS; end;
procedure TFHighscore.dateischreiben;var i,check : word; begin assignFile(Highscore,'Highscore.hgs'); check:=0; while highscorealt[check].Spielername<>'' do inc(check);
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; if fileexists('Highscore.hgs') then reset(Highscore) else 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); begin aSpielerHS[0].punktzahl:=Spieler1p; aSpielerHS[0].Spielername:='In development1';
aSpielerHS[1].punktzahl:=Spieler2p; aSpielerHS[1].Spielername:='In development2'; 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.HSanzeigen; end;
procedure TFHighscore.FormDestroy(Sender: TObject); begin FHighscore.dateischreiben; end; |