Das Problem mit dem Stack-Überlauf wäre gelöst. Das Problem war, dass der Inhalt der Variablen "ende" ungerade war. Daraus ergab sich eine Endlosschleife.
Jetzt hab ich aber ein neues Problem. Es soll nun von unten nach oben sortiert werden (wertniedrigste Zahl zuerst).
Problem: In der Bestenliste wird nur die niedrigste Zahl gespeichert. Das heißt: platz[1], platz[2], platz[3],... haben alle den selben (niedrigsten) Wert.
Delphi-Quellcode:
procedure TForm1.bestenlistebuttonClick(Sender: TObject);
var ende,zwischenspeicher,lauefer,x:integer;
platz: array[1..10000] of integer;
begin
bestenliste.Show;
highscore:=TStringList.Create;
if FileExists ('memory.txt') then
highscore.LoadFromFile('memory.txt');
ende:=highscore.Count;
lauefer:=0;
for x:=1 to 10 do
begin
platz[x]:=StrToInt(highscore[lauefer]);
lauefer:=lauefer+2;
end;
for x:=1 to 10 do
begin
lauefer:=2;
repeat
zwischenspeicher:=StrToInt(highscore[lauefer]);
if zwischenspeicher<platz[x] then
begin
platz[x+9]:=platz[x+8];
platz[x+8]:=platz[x+7];
platz[x+7]:=platz[x+6];
platz[x+6]:=platz[x+5];
platz[x+5]:=platz[x+4];
platz[x+4]:=platz[x+3];
platz[x+3]:=platz[x+2];
platz[x+2]:=platz[x+1];
platz[x+1]:=platz[x];
platz[x]:=zwischenspeicher;
end else
if zwischenspeicher<platz[x+1] then
begin
platz[x+9]:=platz[x+8];
platz[x+8]:=platz[x+7];
platz[x+7]:=platz[x+6];
platz[x+6]:=platz[x+5];
platz[x+5]:=platz[x+4];
platz[x+4]:=platz[x+3];
platz[x+3]:=platz[x+2];
platz[x+2]:=platz[x+1];
platz[x+1]:=zwischenspeicher;
end else
if zwischenspeicher<platz[x+2] then
begin
platz[x+9]:=platz[x+8];
platz[x+8]:=platz[x+7];
platz[x+7]:=platz[x+6];
platz[x+6]:=platz[x+5];
platz[x+5]:=platz[x+4];
platz[x+4]:=platz[x+3];
platz[x+3]:=platz[x+2];
platz[x+2]:=zwischenspeicher;
end else
if zwischenspeicher<platz[x+3] then
begin
platz[x+9]:=platz[x+8];
platz[x+8]:=platz[x+7];
platz[x+7]:=platz[x+6];
platz[x+6]:=platz[x+5];
platz[x+5]:=platz[x+4];
platz[x+4]:=platz[x+3];
platz[x+3]:=zwischenspeicher;
end else
if zwischenspeicher<platz[x+4] then
begin
platz[x+9]:=platz[x+8];
platz[x+8]:=platz[x+7];
platz[x+7]:=platz[x+6];
platz[x+6]:=platz[x+5];
platz[x+5]:=platz[x+4];
platz[x+4]:=zwischenspeicher;
end else
if zwischenspeicher<platz[x+5] then
begin
platz[x+9]:=platz[x+8];
platz[x+8]:=platz[x+7];
platz[x+7]:=platz[x+6];
platz[x+6]:=platz[x+5];
platz[x+5]:=zwischenspeicher;
end else
if zwischenspeicher<platz[x+6] then
begin
platz[x+9]:=platz[x+8];
platz[x+8]:=platz[x+7];
platz[x+7]:=platz[x+6];
platz[x+6]:=zwischenspeicher;
end else
if zwischenspeicher<platz[x+7] then
begin
platz[x+9]:=platz[x+8];
platz[x+8]:=platz[x+7];
platz[x+7]:=zwischenspeicher;
end else
if zwischenspeicher<platz[x+8] then
begin
platz[x+9]:=platz[x+8];
platz[x+8]:=zwischenspeicher;
end else
if zwischenspeicher<platz[x+9] then
begin
platz[x+9]:=zwischenspeicher;
end;
lauefer:=lauefer+2;
until (lauefer=ende) or (lauefer+1=ende);
end;
Form1.Edit1.Text:=IntToStr(zwischenspeicher);
bestenliste.Label1.Caption:=IntToStr(platz[1]);
bestenliste.Label2.Caption:=IntToStr(platz[2]);
bestenliste.Label3.Caption:=IntToStr(platz[3]);
bestenliste.Label4.Caption:=IntToStr(platz[4]);
bestenliste.Label5.Caption:=IntToStr(platz[5]);
bestenliste.Label6.Caption:=IntToStr(platz[6]);
bestenliste.Label7.Caption:=IntToStr(platz[7]);
bestenliste.Label8.Caption:=IntToStr(platz[8]);
bestenliste.Label9.Caption:=IntToStr(platz[9]);
bestenliste.Label10.Caption:=IntToStr(platz[10]);
highscore.Free;
end;