Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Labyrinth darstellen (https://www.delphipraxis.net/14410-labyrinth-darstellen.html)

GetCool 8. Jan 2004 19:50

Re: Labyrinth darstellen
 
@XeRo: Jo, so wäre es noch recht einfach zu realisieren...
@SleepyMaster: Könntest du mal die Project Files uppen?

Morgen krieg ich 3D-Programmierung mit Delphi...für Kids :mrgreen: (wegen Delphi 8, damit ich updaten kann) Vielleicht steht da was drin...2D Spiele werden IMHO auch oft mit kleinen Kästchen programmiert. Das wäre ja genau das richtige...

axelf98 8. Jan 2004 19:52

Re: Labyrinth darstellen
 
So gehts auch: (Etwas überarbeitet)
Delphi-Quellcode:
function Farbcode(Code: integer):TColor;
begin
 result := clwhite;
 case Code of
 1 : result := clred;
 2 : result := clblue;
 3 : result := clgreen;
 4 : result := cllime;
 end;
end;

procedure TForm1.ReDraw;
var
  x,y: longint;
  const Groesse = 20;  //Größe der kacheln
begin
      Image1.Canvas.pen.Color := clwhite;

for x :=0 to 50 do
  for y :=0 to 50 do
    begin
      Image1.Canvas.brush.Color := Farbcode(Spielfeld[x,y]);   //Farbcode
      Image1.Canvas.Rectangle(x*Groesse,y*Groesse,
                x*Groesse+Groesse,y*Groesse+Groesse);
    end;
end;

Fib 8. Jan 2004 20:01

Re: Labyrinth darstellen
 
Man könnt's auch mit nem DrawGrid, bei dem man die Zellen als Wand einfärbt und als Weg, da wär auch das Abfragen ob Wand oder nicht kein großes Problem.

GetCool 8. Jan 2004 20:06

Re: Labyrinth darstellen
 
Sehr gut Fib! Das kommt in die nähere Auswahl. Das ist nun echt einfach zu handhaben. Überleg mir aber noch bis morgen wie genau ich das löse. Also mehr Ideen müssen her :-D Hoffentlich komm ich dann morgen auch dazu ein bisschen rumzuprobieren...

Seniman 8. Jan 2004 20:40

Re: Labyrinth darstellen
 
Hallo Getcool,

für die KI (das Routefinding) der Maus schlage ich dir folgendes vor: Erstelle einen Array of Integer in der Größe des Labyrinths, so dass zu jeder Kachel ein Integer gehört. Setzte alle diese Integer auf -1 (beispielsweise) und das Feld auf dem die Maus steht auf 0. Nun brauchst du eine Schleife die den Array so ausfüllt, dass in jedem Feld die Anzahl der Schritte steht, die das Feld im Labyrinth von der Maus entfernt ist. d.h. die Felder über, unter und neben der Maus bekommen eine 1, sofern keine Wand dazwischen ist usw...
Die Schleife könnte beispielsweise eine for-Schleife sein, wobei der Laufindex ich nenn ihn mal i,dann die Zahl ist, die überprüft werden muss und das geht so: In diese Schleife setzt du wieder zwei Schleife, um so alle Felder des Labyrinths durchzugehen. Steht in irgendeinem Feld die Zahl i, dann schaust du ob die umliegenden Felder (oben, unten, rechts, links) direkt von diesem Feld aus erreichbar sind (d.h. keine Wand ist dazwischen) und ob darin noch keine Zahl steht, die kleiner als i ist. Ist dies der Fall, schreibst du in die entsprechenden Felder die Zahl i+1. Nach Maximal 2500 Durchläufen ist das ganze Labyrinth mit diesen Zahlen gefüllt, wobei die nicht erreichbaren Felder immernoch -1 enthalten.
Der Kürzeste Weg zum Ausgang lässt sich dann so finden: Starte bei der Betrachtung des Wegs beim Ausgang. Gehe nun auf das benachbarte Feld, dessen Wert um 1 kleiner ist als auf diesem Feld... usw. Irgendwann kommst du dann bei der Maus an.
Das ganze ist natürlich eigentlich keine KI, sonder Routefinding, d.h. wenn die Aufgabe ist, eine Maus zu programmieren, die nicht das ganze Labyrinth kenn, sondern nur den Teil, wo sie schon war, dann musst du es anders machen.

Grüße
Seniman

GetCool 8. Jan 2004 20:51

Re: Labyrinth darstellen
 
Zitat:

Zitat von Seniman
Das ganze ist natürlich eigentlich keine KI, sonder Routefinding, d.h. wenn die Aufgabe ist, eine Maus zu programmieren, die nicht das ganze Labyrinth kenn, sondern nur den Teil, wo sie schon war, dann musst du es anders machen.

Da liegt das Problem an deiner Ausführung. Leider kennt die Maus das Labyrinth nicht. Wäre ja auch langweilig wenn die Maus den Weg sowieso immer kennt. Aber trotzdem guter Lösungvorschlag :roteyes:

XeRo 8. Jan 2004 20:58

Re: Labyrinth darstellen
 
Wenn die Maus das Labyrinth nicht kennt, dann machs wirklich mit einem Array aus bitmaps, dann versuch zuerst ob die maus nach rechts gehen kann, wenn nicht dann nach links,...
Dann muss sie sich noch irgendwie merken, wo sie schon war und wo eine sackgasse ist,...

Aber so ungefähr könnt ich mir das vorstellen...und es ist nicht wirklich kompliziert so zu prog.

GetCool 8. Jan 2004 21:16

Re: Labyrinth darstellen
 
Zitat:

Zitat von XeRo
Aber so ungefähr könnt ich mir das vorstellen...und es ist nicht wirklich kompliziert so zu prog.

Naja, erstens das Spielfeld, aber da hab ich ja jetzt ziemlich viele Vorschläge. Das wird nicht so das Problem. Aber du lässt ausser acht, dass der Code ziemlich komplex sein wird und ich schätze auch kompliziert, wenn die Maus möglichst intelligent durch das Labyrinth laufen soll. Aber das kann man ja nach und nach verbessern, hauptsache ich krieg erstmal ein ordentliches Zufallslabyrinth hin.

XeRo 8. Jan 2004 21:25

Re: Labyrinth darstellen
 
wollte sagen dass das "WIE KÖNNTE ES GEHEN" nicht schwer ist...

...dass das Prog ziemlich umfangreich wird ist klar, aber wenn dein Lehrer eine gute und saubere Lösung will muss er mit sowas rechnen... :roll:

SleepyMaster 9. Jan 2004 14:37

Re: Labyrinth darstellen
 
[OT]
Zum Thema KI:

D-Robots ist echt Hammer! ;)
www.plasmacode.com
[/OT]


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 Uhr.
Seite 2 von 4     12 34      

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 by Thomas Breitkreuz