Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Hilfe mit Canvas für Schiffe versenken. (https://www.delphipraxis.net/185647-hilfe-mit-canvas-fuer-schiffe-versenken.html)

Lasbr 26. Jun 2015 18:33

Hilfe mit Canvas für Schiffe versenken.
 
Hallo Delphi-Praxis-User :),

momentan bin ich dabei Delphi zu erlernen und ein Schiffe versenken zu programmieren.
Ich habe mir vorgestellt das Ganze mit Canvas zu erstellen und habe ein Gitter in eine PaintBox gezeichnet, für was ich schon ewig gebraucht habe, da ich null Ahnung habe, wie die Befehle heißen und wie die Syntax aussieht. Nun habe ein 12x12 Gitter und würde gerne wissen, wie ich die Zellen einzeln ansprechen kann (OnClick, Wert zuweisen, ob Schiff gesetzt, nicht gesetzt). Ich denke man könne das am Besten mit Koordinaten erledigen. Mein Gitter habe ich mit folgender Prozedur gezeichnet, wobei MaxFelder=12 und Höhe,Breite,Position der Zelle im Vorraus festgelegt:

Code:
Canvas.Brush.Style := bsClear;
    for x := 1 to MaxFelder do
      for y := 1 to MaxFelder do
      begin
        Pen.Color := clGray;

        Rectangle(CellRect(Canvas, x, y));
      end;
Ich hoffe ihr könnt mir helfen,
MfG Lasbr

#Achja vor lauter lauter vergessen: Was ich suche sind zum Beispiel Onclick Befehle mit bestimmter Koordinate einer Zelle

zeras 26. Jun 2015 19:26

AW: Hilfe mit Canvas für Schiffe versenken.
 
Nimm doch ein Grid, dann kannst du bei einem Klick feststellen, welche Zeile/Spalte gedrückt wurde. Wenn du das in einer Paintbox machst, wird es ein wenig schwieriger.

Perlsau 26. Jun 2015 20:00

AW: Hilfe mit Canvas für Schiffe versenken.
 
Zitat:

Zitat von Lasbr (Beitrag 1306766)
Ich habe mir vorgestellt das Ganze mit Canvas zu erstellen und habe ein Gitter in eine PaintBox gezeichnet, ... Was ich suche sind zum Beispiel Onclick Befehle mit bestimmter Koordinate einer Zelle

Du kannst beim Klick in eine Paintbox lediglich ermitteln, auf welcher X-Y-Koordinate der Klick erfolgt ist. Je nach Größe deiner Rechtecke, die du da in die Paintbox zeichnest, errechnest du davon ausgehend das Kästchen, das angepeilt wurde. Eine Paintbox ist nicht in Spalten und Zeilen aufgeteilt, auch wenn du solche dort hineinzeichnest.

Lasbr 26. Jun 2015 20:01

AW: Hilfe mit Canvas für Schiffe versenken.
 
Welche Grid kannst du mir da empfehlen? Stringgrid? Ich finde die Lösung mit dem Canvas halt einfach schön :D !
Wie würde ich denn ermitteln wo der Klick war und welches Kästchen welchen Pixeln entspricht?
Danke für die schnelle Antwort

DeddyH 26. Jun 2015 20:05

AW: Hilfe mit Canvas für Schiffe versenken.
 
Wenn Du die Breite eines Rechtecks und die X-Koordinate der Maus weißt, kannst Du mit ganzzahliger Division den 0-basierten Index der Zelle errechnen, analog verhält es sich mit der Y-Achse.

Popov 26. Jun 2015 20:05

AW: Hilfe mit Canvas für Schiffe versenken.
 
Liste der Anhänge anzeigen (Anzahl: 1)
Gegen TPaintBox spricht nichts, obwohl ich eher TImage empfehlen würde, da so der Inhalt erhalten bleibt. Bei TPaintBox muss man es eben nachzeichnen, falls sich ein Fenster drüber legt.

Ich hab hier schon mal jemandem geholfen und einen Beispiel-Code veröffentlicht, finde es aber nicht mehr. Deshalb veröffentliche ich es erneut. Es bleibt dir überlassen ob du es ganz nimmst oder nur Anregungen draus holst. Auf jeden Fall wird das über TImage angesteuert.

Das Programm nennt sich Wild Jagt, ist aber das gleiche Prinzip wie Fische versenken.

Luckie 26. Jun 2015 20:10

AW: Hilfe mit Canvas für Schiffe versenken.
 
Nein. Eine Paintbox ist schon das richtige Kontrollelemnet zum selber Zeichnen. Heißt auch nicht umsonst Paintbox.

DeddyH 26. Jun 2015 20:11

AW: Hilfe mit Canvas für Schiffe versenken.
 
Eben, und wenn man deren OnPaint-Ereignis zum Zeichnen verwendet, muss man da auch nichts händisch nachzeichnen.

Sir Rufo 26. Jun 2015 20:14

AW: Hilfe mit Canvas für Schiffe versenken.
 
Zitat:

Zitat von Luckie (Beitrag 1306776)
Nein. Eine Paintbox ist schon das richtige Kontrollelemnet zum selber Zeichnen. Heißt auch nicht umsonst Paintbox.

Ob PaintBox oder Image ist doch völlig egal. Bei beiden wird gezeichnet und wenn man sich geschickt anstellt sind die Zeichenroutinen sogar absolut gleich.

Vorteil beim Image ist, dass bei einem Form-Refresh einfach das bereits gezeichnete Bild erneut angezeigt wird und nicht komplett neu gezeichnet werden muss. Der Unterschied sollte auf aktuellen Rechnern allerdings nicht bemerkbar sein.

zeras 26. Jun 2015 20:25

AW: Hilfe mit Canvas für Schiffe versenken.
 
Zitat:

Zitat von Lasbr (Beitrag 1306772)
Welche Grid kannst du mir da empfehlen? Stringgrid? Ich finde die Lösung mit dem Canvas halt einfach schön :D !
Wie würde ich denn ermitteln wo der Klick war und welches Kästchen welchen Pixeln entspricht?
Danke für die schnelle Antwort

Mit OnSelectCell bekommst du die Zeile und Spalte übergeben, aber du kannst natürlich auch die Rechnerei machen, wie die anderen beschrieben haben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:09 Uhr.
Seite 1 von 2  1 2      

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