Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Labyrinth darstellen (https://www.delphipraxis.net/39643-labyrinth-darstellen.html)

Skyrunner2 5. Feb 2005 18:24


Labyrinth darstellen
 
hallo,
wie kann ich mit Delphi 5 am besten ein labyrinth darstellen? also X * X zellen mit jeweils einer wand zur nächsten benachbarten zelle. Ich muss auf alle zellen wände zugreifen können und die möglichkeit haben sie ein oder aus zuschalten und ich möchte ebenfalls die möglichkeit haben die farbe einzelner zellen zu ändern.


wie kann ich eine solche graphische darstellun realisieren? (Delphi 5 pro)

danke,
~Lukas

Maximus 5. Feb 2005 19:03

Re: Labyrinth darstellen
 
Hallo,

Du könntest das ganze mit DirectX realisieren ( Hier im Forum suchenDelphiX )

Das Labyrinth kannst du dan dynamisch aus einer bitmap Datei laden (pro Pixel eine "Zelle"), und je nach Farbe dieses Pixels die Farbe der Zelle

MFG
Maximus

Alexander 5. Feb 2005 19:13

Re: Labyrinth darstellen
 
Wenn du dich nicht groß mit dem Malen des Labyrinth beschäftigen willst, dann kannst du auch einfach ein (Draw) Grid nehmen und die entsprechenden Felder einfärben...

Skyrunner2 5. Feb 2005 23:43

Re: Labyrinth darstellen
 
hmm ich denke mit dem draw grid hab ich nicht die möglichkeiten die ich benötige.

DriectX hört sich kompiziert an, aber ich werde es mir mal genauer ansehen.

noch andere möglichkeiten ein labyrinth darzustellen?


um das problem noch witer zu erläutern:
ich versuche im prinzip, nur den generator wie er hier zusehen ist nachzubauen, und zu erläutern, im rahmen einer facharbeit für meinen Informatik kurs der stufe 12.

Maximus 6. Feb 2005 07:58

Re: Labyrinth darstellen
 
Hallo,

Da mich das Thema interessiert, versuch ich jetzt auf der basis einer Canvas Funktion ein Labyrinth darzustellen. (Soll wenn es fertig ist OpenSource werden)

Ich gebe hier mal ein Beispiel wie du eine Map (aus einer Bitmap Datei) auslesen und auf deine Form zeichnen kannst

Delphi-Quellcode:
var Map: TBitmap;

procedure InitMap;
begin
 Map := TBitmap.Create;
 Map.LoadFromFile('Map.bmp');
end;

procedure DrawMap;
var x, y: Integer;
begin
 for x := 1 to Map.Width do
  begin
   for y := 1 to Map.Height do
    begin
     Form1.Canvas.Brush.Color := Map.Canvas.Pixels[x,y]; //Damit der Inhalt die Farbe des Pixels annimmt
     Form1.Canvas.Pen.Color := Map.Canvas.Pixels[x,y];  //Damit der Zeichen Stift die Farbe des Pixels annimm
                                                         //weglassen wenn du einen Rahmen um deine "Zelle" willst
     Form1.Canvas.Rectangle(x*20-20, y*20-20, x*20. y*20); // Ein Rechteck ("Zelle"), 20*20 Pixel groß zeichnen
    end;
  end;
end;
Ich hab den Code nicht getestet, könnten also noch fehler drin sein

Du brauchst nur noch ein Timer in dem du immer die Draw Procedure aufrufst und am besten danach das ganze "erneuerst" (Stichwort: Form1.Canvas.Refresh )

Ich hoffe das hat dir etwas weitergeholfen

//Edit Ups, den Link leider etwas zu spät gesehen, dan fällt das wohl mit dem Bitmap weg, aber stats Map.Height und Map.Width kannst die größe deines Labysrinths angeben und Pen.Color eben den Wert clWhite und Brush.Color den Wert für Grau zuweisen, somit kannst du die Draw Procedure dennoch verwenden :D

MFG
Maximus

Skyrunner2 6. Feb 2005 14:21

Re: Labyrinth darstellen
 
what about using a TDrawGrid?

fixed cols & rows = 0; default cell width & hight = ~ 10 px.

dann hab ich ja schon von delphi aus nen möglichkeit einzelne zellen z erfassen.
doch kann ich über diese methodde auch "wände" sprich zell wände, löschen?

such schon durch die help datei aber hoffentlich kennt sich hier jemand damit aus..

problem nochmal: Ich muss die mögliochkeit haben die "wand" zwischen 2 zellen zu zerstören, ne funktion die mir sagt ob zwischen zelle 1 und zelle 2 eine wand ist, und ich muss die möglichkeit haben die hintergrund farbe einer zelle zu ändern...


DelphiX scheint nur mit 3,4,& 7 zu funzen..

~luke


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:25 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