Einzelnen Beitrag anzeigen

Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#1

"Pipes" Karten erstellen lassen (automatisch)

  Alt 25. Feb 2010, 19:16
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
  Mit Zitat antworten Zitat