ich habe eine Procedur geschrieben, die die Schiffe des Computers setzen soll. Dabei ist es wichtig, dass das Schiff nicht über den Rand geht und nicht durch ein anderes "fährt".
jetzt habe ich das Problem, dass sich das Programm aufhängt und auch nur noch durch Lazarus zu schließen ist, sobald die Prozedur ausgeführt wird.
Mg Jochim
Die Prozedur:
Code: Alles auswählen
procedure TForm1.schiffsetzencom;
var c,i:integer; dasetzcom:boolean;
begin
for i:=1 to 4 do begin //jedes Schiff
repeat //Solange kein Schiff über Rand, und nicht Schiffe aufeinander sind
dasetzcom:=true; //wenn True ist setzen möglich
schiffcom[i].x:=random(iraster-1)+1; //x koordinate iraster=spielfeldgröße
schiffcom[i].y:=random(iraster-1)+1; //y koordinate
c:=random(2); //zufällige ausrichtung
If c=1 then schiffcom[i].ausrichtung:=True else schiffcom[i].ausrichtung:=False;
schiffcom[i].leng:=i+1; //schifflänge festsetzen
if ((schiffcom[i].ausrichtung=true) and (schiffcom[i].leng+schiffcom[i].y<iraster)) then
begin //Schiffsetzen wenn ausrichtung true und schiff dann nicht über rand herrausguckt
for c:=0 to schiffcom[i].leng-1 do begin //kennzeichnen des schiffes in einem array of String mit der kompletten länge
If (sgcom[schiffcom[i].x,schiffcom[i].y+c]<>'') then begin //überprüfung ob schon ein Schiff vorhanden ist
dasetzcom:=false; //setz variable auf false setzen fals vorhanden
end else sgcom[schiffcom[i].x,schiffcom[i].y+c]:=bt[i]; //kennzeichnen des schiffes
end;
end else dasetz:=False;
if ((schiffcom[i].ausrichtung=False) and (schiffcom[i].leng+schiffcom[i].x<iraster)) then
begin //schiffsetzen wenn ausrichtung false und schiff dann nicht über rand herrausguckt
for c:=0 to schiffcom[i].leng-1 do begin
If (sgcom[schiffcom[i].x+c,schiffcom[i].y]<>'') then begin
dasetzcom:=false;
end else sgcom[schiffcom[i].x,schiffcom[i].y+c]:=bt[i];
end;
end else dasetz:=False;
//end;
until dasetzcom=True; //überprüfung ob setzen mörglich
//zeichnen ins StringGrid (sgcomputer
for i:=1 to 4 do begin
//komplette schiff länge
for c:=0 to schiffcom[i].leng-1 do begin
//ausrichtung prüfen
if schiffcom[i].ausrichtung=True then begin
sgcomputer.cells[schiffcom[i].x,schiffcom[i].y+c]:=bt[i];
end;
if schiff[i].ausrichtung=False then begin
sgcomputer.cells[schiffcom[i].x+c,schiffcom[i].y]:=bt[i];
end;
end;
end;
end;