Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Schiffe versenken (https://www.delphipraxis.net/147835-schiffe-versenken.html)

Teekeks 18. Feb 2010 20:25

Re: Schiffe versenken
 
*grml* CP

Luckie 18. Feb 2010 20:31

Re: Schiffe versenken
 
In wie vielen Foren wird denn zur Zeit an deinem Problem gearbeitet? :roll:

kindliche kaiserin 18. Feb 2010 20:35

Re: Schiffe versenken
 
Mit diesem hier drei. Tut mir leid. Stütze mich aber nur noch auf dieses hier..

Klaus01 18. Feb 2010 20:55

Re: Schiffe versenken
 
Guten Abend,

Schiffeversenken basiert doch auf einem Spielfeld mit x * y Kästchen (Quadraten).

Als Spielfeld würde sich hier ein Delphi-Referenz durchsuchenDrawGrid anbieten.
Dieses kannst Du zellenweise, spaltenweise, zeilenweise ansprechen.

Damit sollte es auch ohne Probleme möglich sein, wenn ein Schiff platziert wird;
zu Überprüfen ob die Felder schon belegt sind.

Grüße
Klaus

kindliche kaiserin 18. Feb 2010 21:18

Re: Schiffe versenken
 
@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..

mimi 18. Feb 2010 21:25

Re: Schiffe versenken
 
Wie schon in der DF gesagt: Ich würde einfach ein 2D Array nehmen. Mit der Annahme das alle Objekte gleich groß sind.
Dann kannst du die Daten aus dem "2D Array" auch jeder Zeit neu zeichnen und außerdem kannst du in diesen Fall ganz leicht die Position bestimmen, die angeklickt wurde. Das Array muss nicht mal Dynamisch sein. Die Kollisions Erkennung wird zum Kinderspiel.

KB-Selbst 19. Feb 2010 09:02

Re: Schiffe versenken
 
Zitat:

Zitat von kindliche kaiserin
nur finde ich den Fehler darin nicht..

Ich rate dringend von so einer Formatierung ab.

Es ist aus dem äußerden Bild, das durch die Formatierung vorgegeben wird, nicht ersichtlich, dass die For-Schleife mit Laufvariable H den kompletten Rest des Posting beinhaltet. Das erschwert die Fehlersuche erheblich. Warum befindet sich denn in keiner der Abfragen eine der Laufvariablen der For-Schleifen?

kindliche kaiserin 19. Feb 2010 09:56

Re: Schiffe versenken
 
Zitat:

Zitat von KB-Selbst
Zitat:

Zitat von kindliche kaiserin
nur finde ich den Fehler darin nicht..

Ich rate dringend von so einer Formatierung ab.

Es ist aus dem äußerden Bild, das durch die Formatierung vorgegeben wird, nicht ersichtlich, dass die For-Schleife mit Laufvariable H den kompletten Rest des Posting beinhaltet. Das erschwert die Fehlersuche erheblich. Warum befindet sich denn in keiner der Abfragen eine der Laufvariablen der For-Schleifen?


Sorry, aber ich habe jetzt deine Frage nicht ganz verstanden..
Und welche Abfragen meinst du jetzt speziell?

DeddyH 19. Feb 2010 10:06

Re: Schiffe versenken
 
Ich denke, er meint z.B. das hier:
Zitat:

Delphi-Quellcode:
for i:=0 to hoehe do
          if (img_mensch.Canvas.Pixels[xs-12,ys+hoehe]=clgreen)

Hier machst Du (hoehe + 1)-mal dasselbe.

kindliche kaiserin 19. Feb 2010 10:09

Re: Schiffe versenken
 
Das habe ich gerade schon gefunden und verbessert, trotzdem funktioniert es noch nicht..:/


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:16 Uhr.
Seite 2 von 5     12 34     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz