Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi n-Dame: Grafische Darstsellung (https://www.delphipraxis.net/60490-n-dame-grafische-darstsellung.html)

muetzentraeger 7. Jan 2006 16:48


n-Dame: Grafische Darstsellung
 
Ich versuche ein Simulationsprogramm für das n-Dame-Problem zu schreiben (aus Einfachheitsgründen auf 8 Damen reduziert). Meine Ziel ist es die Schritte, die der Backtracking-Algorithmus nimmt für den Benutzer sichtbar zu machen. Ich benötige also ein Schachbrett mit 8x8 Feldern. In dieses Feld werden die Damen gesetzt. Beginnend mit der ersten Spalte. Die zweite (und auch die folgenden Damen) werden in die noch jeweils unbelegten Spalten gesetzt, und so lange nach unten gerückt, bis sie nicht mehr bedroht werden. Gibt es keine weitere Lösung wird vorhergehende Dame wieder um eine Zeile nach unten gesetzt. (um grob anzureißen um was es geht :wink: ) Der Quelltext steht und ist Funktionsfähig. Nun ist dir große Frage wie ich es visualisieren kann. Ich hab an ein DrawGrid gedacht, in das ich Bilder laden kann, habe selbst aber keine Ahnung wie ich es machen soll.

Hat jemand eine besssere Idee?
Oder kann mir jemand Helen das DrawGrid in die Tat umzusetzen?

DP-Maintenance 7. Jan 2006 16:58

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Multimedia" verschoben.
In die Code-Library gehören nur fertige, funktionsfähige Codes, die man anderen Nutzern zum Nachschauen zur Verfügung stellt. Fragen sind hier fehl am Platz.

Jarmen_Kell 7. Jan 2006 19:50

Re: n-Dame: Grafische Darstsellung
 
Also mir ist jetzt natürlich nicht bewusst, wie du deine Daten speicherst.
Ich gehe einfach mal von einem 2D-Array of Boolean aus. Was es in Wirklichkeit ist, ist ja nicht weiter relevant; einfach entsprechend abändern.

Dann machst du das DrawGrid natürlich auf 8x8 Größe.

Nur mal der grobe Code (Befehle können variieren); Gerade kein Delphi da :(

Delphi-Quellcode:
var Brett:Array[0..7,0..7] of Boolean;
[...]
procedure TForm.DrawGridOnDrawCell(ACol, ARow:Integer);
begin
If Brett[Acol,Arow] then DrawGrid.Canvas.Irgendwas;
end;

// Bei Bildern laden noch das dazu:

var Dame:TBitmap;

procedure TForm.Create;
begin
Dame:=TBitmap.Create;
Dame.Picture.LoadFromFile('Pfad')
end;
ACol + ARow geben die aktuelle Spalte und Zeile an, die zZ gezeichnet wird.

Bei Irgendwas könntest du zum Beispiel mit DrawCircle einfach nen Kreis machen.
Alternativ ein Bild in ein TBitmap laden, dafür gibts dann auch einen Befehl zum reinkopieren. Müsste sich mit angucken der gebotenen Möglichkeiten schnell herausfinden lassen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:00 Uhr.

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