Hallo Alle Zusammen
ich habe hier eine Procedure aus meinem kartenspiel
Code:
procedure TForm1.naechsterspieler(spieler, wieviel, welchezahl: integer);
var c, d, wie: integer;
a: array [1..8] of integer;
kleft: integer;
begin
if spieler = 1 then spielerzug(viel, zahl) else
begin
wieviel := viel;
kleft := mitte;
for c := 0 to 7 do begin if lb[spieler].Items.Strings[c][2] = '1' then a[1] := a[1] + 1;
if lb[spieler].Items.Strings[c][2] = '2' then a[2] := a[2] + 1;
if lb[spieler].Items.Strings[c][2] = '3' then a[3] := a[3] + 1;
if lb[spieler].Items.Strings[c][2] = '4' then a[4] := a[4] + 1;
if lb[spieler].Items.Strings[c][2] = '5' then a[5] := a[5] + 1;
if lb[spieler].Items.Strings[c][2] = '6' then a[6] := a[6] + 1;
if lb[spieler].Items.Strings[c][2] = '7' then a[7] := a[7] + 1;
if lb[spieler].Items.Strings[c][2] = '8' then a[8] := a[8] + 1;
end;
for d := 1 to 8 do
if (a[d] = wie) and (d >= welchezahl) then
begin showmessage('Der Spieler ' + inttostr(spieler) + ' wird mit ' + inttostr(d) + ' legen.');
label7.Caption := inttostr(d);
for c := 0 to 7 do
if lb[spieler].Items.Strings[c][2] = inttostr(d) then
begin k[(spieler * 8) - (7 - c)].Left := kleft;
kleft := kleft + 15;
k[(spieler * 8) - (7 - c)].top := mitte1;
lb[spieler].Items.Strings[c] := ' ';
labels[spieler].Caption := 'Hat ' + inttostr(wie) + inttostr(d) + ' gelegt';
end;
spieler := spieler + 1;
if spieler > 4 then
spieler := 2;
naechsterspieler(spieler ,wie ,d + 1);
end;
end;
label5.Caption := 'spieler kann nicht legen';
spieler := spieler + 1;
if spieler > 4 then spieler := 2;
naechsterspieler(spieler ,wie ,d + 1);
end;
Ich versuche mein Problem zu erklären:
Die oben angezeigte procedure sind die Computer-Spieler.
Doch es kommt immer zu einem sogennanten Stack-Überlauf.
Was ist das? Wie kann ich es beheben? wo liegt der Fehler?
Wodurch wird es verurscht?