![]() |
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... |
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; |
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.
|
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...
|
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 |
Re: Labyrinth darstellen
Zitat:
|
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. |
Re: Labyrinth darstellen
Zitat:
|
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: |
Re: Labyrinth darstellen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 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 by Thomas Breitkreuz