Wenn, dann so:
Delphi-Quellcode:
const c_Err1 = 'Die Schiffe dürfen sich nicht überlagern bzw. nebeneinander sein.';
x_hilf:=X div 25; y_hilf:=Y div 25; // Das mit den vielen Befehlen in einer Zeile stört mich jetzt weniger.
xs:=x_hilf*25; ys:=y_hilf*25;
if (xs+laenge>250) or (if ys+hoehe>250)
then
showmessage('Das Schiff muss sich komplett innerhalb des Feldes befinden.')
else
for h:=0 to laenge do
begin
if (img_mensch.Canvas.Pixels[xs+h,ys -12]=clgreen) or
(img_mensch.Canvas.Pixels[xs+h,ys+hoehe+12]=clgreen)
then
showmessage(c_Err1)
else
for i:=0 to hoehe do
begin
if (img_mensch.Canvas.Pixels[xs -12,ys+hoehe]=clgreen) or
(img_mensch.Canvas.Pixels[xs+laenge+12,ys+hoehe]=clgreen)
then
showmessage(c_Err1)
else
if (img_mensch.Canvas.Pixels[xs- 12,ys -12]=clgreen) or
(img_mensch.Canvas.Pixels[xs+laenge+12,ys -12]=clgreen) or
(img_mensch.Canvas.Pixels[xs+laenge+12,ys+hoehe+12]=clgreen) or
(img_mensch.Canvas.Pixels[xs- 12,ys+hoehe+12]=clgreen)
then
showmessage(c_Err1)
else
.
.
.
end;
end;
Du kannst natürlich so formatieren wie du willst. Wenn du's aber so machst, wie ich oben angegeben, siehst du gleich, welche FOR-Schleife wo endet.
Auch das Nicht-Verwenden von Begin/End hat, ganz besonders in deinem Falle (mehrere Verschachtelungen) einen erheblichen Nachteil: Den ; an der falschen Stelle gesetzt und die For-Schleife ist beendet, wo sie gar nicht beendet werden soll. Dumm nur, dass die Falschpositionierung des Strichpunktes nur sehr schwer zu finden ist.