Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   "Pipes" Karten erstellen lassen (automatisch) (https://www.delphipraxis.net/148240-pipes-karten-erstellen-lassen-automatisch.html)

Delphi-Narr 25. Feb 2010 19:16


"Pipes" Karten erstellen lassen (automatisch)
 
Hallo,
ich habe folgendes Problem:
Ich habe das Spiel "Pipes" programmiert (Man muss Rohre miteinander verbinden, bis alle angeschlossen sind).
Das Spielfeld ist ein Canvas, es sind 9*9 Rohrfelder.

Es gibt 5 verschiedene Arten von Rohren:

Kreuzung, TKreuzung (Kreuzung mit nur 3 Armen), Gerade, Ecke und Endstück (Ein Anschluss, endet in der Mitte des Kästchens).
Das Ganze wird auf einem TImage dargestellt und ausgewertet.

Das Spiel selbst klappt wunderbar, doch ich habe auch einen Mapeditor erstellt. Dort muss man jedes einzelne Feld selber eintragen (Art auswählen) und drehen (Zur Überprüfung, dass die Map lösbar ist). Im Spiel werden die Rohre dann willkürlich verdreht. Der Start befindet sich genau in der Mitte des Feldes, von diesem Rohr gehen alle anderen ab.
Die Datei, in der die Karte gespeichert wird, ist so aufgebaut, dass für jeden Rohrabschnitt eine Zeile verwendet wird, in der nur einer der Buchstaben K,T,E,G oder Z steht.

Während die Map erstellt wird gilt folgende Notation:

Aufbau des Canvas:

Code:
_____________________________________
|   |   |   |   |   |   |   |   |   |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|___|___|___|___|___|___|___|___|___|
|   |   |   |   |   |   |   |   |   |
| 9 | 10| 11| 12| 13| 13| 15| 16| 17|
etc.

Allgemein gilt für Nummer des Feldes= (Zeile*8)+Spalte+Zeile;
wobei die Spalten und Zeilen bei 0 beginnen. Diese Nummern werden im Array "Typ" (array [0..80] of string) benutzt.
Dieser speichert die Abkürzungen für die Rohrarten entsprechend dieser Nummern.

Jetzt möchte ich, dass der Computer automatisch eine Map erstellt, die keine offenen Endungen hat (Also nur Typ "Z" als letztes Stück eines Rohres aktzeptiert) und die Typen in den Array schreibt. So sollen in verschiedenen Durchläufen auch verschiedene Maps entstehen.
Nur habe ich leider keine Ahnung, wie ich das anstellen kann...

Liebe Grüße!

Edit:

Oh, ich habe da etwas vergessen: Die Ausrichtung der einzelnen Rohre, also wie sie gerade gedreht sind, wird im Array "A" (of integer) gespeichert.

Ausrichtung 1 für die T-Kreuzung:

Code:
___________
|    II   |
|    II   |
|IIIIII   |
|    II   |
|____II____|
Allgemein gilt: das "rechte" Ende zeigt immer nach oben:
Ecke:

Code:
___________
|    II   |
|    II   |
|IIIIII   |
|          |
|__________|
Es wird im Uhrzeigersinn gedreht


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