![]() |
Re: Schiffe versenken
*grml*
![]() |
Re: Schiffe versenken
In wie vielen Foren wird denn zur Zeit an deinem Problem gearbeitet? :roll:
|
Re: Schiffe versenken
Mit diesem hier drei. Tut mir leid. Stütze mich aber nur noch auf dieses hier..
|
Re: Schiffe versenken
Guten Abend,
Schiffeversenken basiert doch auf einem Spielfeld mit x * y Kästchen (Quadraten). Als Spielfeld würde sich hier ein ![]() 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 |
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:
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...".
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; Also meiner Meinung nach ist mein Ansatz schon richtig, nur finde ich den Fehler darin nicht.. |
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. |
Re: Schiffe versenken
Zitat:
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? |
Re: Schiffe versenken
Zitat:
Sorry, aber ich habe jetzt deine Frage nicht ganz verstanden.. Und welche Abfragen meinst du jetzt speziell? |
Re: Schiffe versenken
Ich denke, er meint z.B. das hier:
Zitat:
|
Re: Schiffe versenken
Das habe ich gerade schon gefunden und verbessert, trotzdem funktioniert es noch nicht..:/
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz