@Klaus: Hmm...wäre möglich, aber jetzt habe ich mich schon so lange mit dem TImage rumgeschlagen, jetzt kann ich das auch damit zu Ende bringen..^^ Mir kam gerade folgende Idee:
Delphi-Quellcode:
procedure TForm1.img_menschMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var x_hilf, xs, y_hilf, ys, h, i: integer;
begin
if (hoehe=0) and (laenge=0) then
showmessage('Bitte wählen Sie ein Schiff aus.')
else
begin
x_hilf:=X div 25; y_hilf:=Y div 25;
xs:=x_hilf*25; ys:=y_hilf*25;
if xs+laenge>250 then
showmessage('Das Schiff muss sich komplett innerhalb des Feldes befinden.')
else if ys+hoehe>250 then
showmessage('Das Schiff muss sich komplett innerhalb des Feldes befinden.')
else for h:=0 to laenge do
if (img_mensch.Canvas.Pixels[xs+h,ys-12]=clgreen) or
(img_mensch.Canvas.Pixels[xs+h,ys+hoehe+12]=clgreen) then
showmessage('Die Schiffe dürfen sich nicht überlagern bzw. nebeneinander sein.')
else for i:=0 to hoehe do
if (img_mensch.Canvas.Pixels[xs-12,ys+hoehe]=clgreen) or
(img_mensch.Canvas.Pixels[xs+laenge+12,ys+hoehe]=clgreen) then
showmessage('Die Schiffe dürfen sich nicht überlagern bzw. nebeneinander sein.')
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('Die Schiffe dürfen sich nicht überlagern bzw. nebeneinander sein.')
else
.
.
.
.
end;
end;
Mit den letzten beiden Bedingungsüberprüfungen würde zwar reintheoretisch jeder einzelne Punkt um das Schiff herum geprüft werden, jedoch muss da irgendwo noch ein Fehler drin sein. Wenn ich das erste Schiff platzeiren will - also es kann rein theoretisch zu keinem Konflikt kommen, da es kein Schiff kreuzen kann - kommt trotzdem die Meldung "Die Schiffe dürfen...".
Also meiner Meinung nach ist mein Ansatz schon richtig, nur finde ich den Fehler darin nicht..