Thema: Delphi Schiffe versenken

Einzelnen Beitrag anzeigen

kindliche kaiserin

Registriert seit: 17. Feb 2010
16 Beiträge
 
#15

Re: Schiffe versenken

  Alt 18. Feb 2010, 21:18
@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..
  Mit Zitat antworten Zitat