Einheit 5: Weg auf schwarzen Pixeln erweitern

Die Grundidee ist folgende:

  • Man sucht zwei aufeinanderfolgende Zellen im Weg, so dass die beiden Zellen daneben schwarz, aber nicht auf dem Weg sind (z.B. Zellen a und b, oder c und d im folgendend Bild):
+---+---+---+---+---+---+   +
|   |   |   |   |   | d   # |
+---+---+---+---+---+   +---+
|   |   | a   b |   | c |   |
+---+---+   +   +---+   +---+
  • Die Wand zwischen a,b wird dann gesetzt, und der Weg über die zwei benachbarten Zellen x, y umgeleitet:
+---+---+---+---+---+---+   +
|   |   | x   y |   | d   # |
+---+---+   +   +---+   +---+
|   |   | a | b |   | c |   |
+---+---+   +   +---+   +---+
  • Das wiederholt man so lange, wie das möglich ist. Die Zellen werden zufällig ausgewählt, damit keine «geraden Korridore» entstehen.
  • Damit man nicht alle 4 Fälle programmieren muss, wird mit Operationen auf der Richtung (wie ein Winkel) gearbeitet.
    • ist dir die Richtung, sind (dir+1)%4 und (dir+3)%4 die dazu rechtwinkligen Richtungen.
    • Die Klasse Zelle hat eine Methode dirTo(other), die die Richtung zu einer anderen Zelle berechnet.
from wegerweiterung import wegerweiterung
wegerweiterung(weg)