from laby import Laby from zelle import Zelle import time from random import shuffle # Liefert die nächste Markierung 0-9,A-Z,a-z def naechsteMarkierung(markierung): if markierung=="9": return "A" if markierung=="Z": return "a" return chr(ord(markierung)+1) # Farben im Terminal def makeNormal(mark): if len(mark)==1: return mark else: return mark[5] def makeRed(mark): RED="\x1b[31m" NORMAL="\x1b[0m" return RED+makeNormal(mark)+NORMAL def makeGreen(mark): RED="\x1b[32m" NORMAL="\x1b[0m" return RED+makeNormal(mark)+NORMAL # Datei aus der zip-Datei, siehe Unterichtsunterlagen lab = Laby.load("labs/05x05-04.txt") # Start lab[0,0].mark = 'S' # Nächste Markierung markierung = '0' # Todo-Liste enthält die Startzelle todo = [ lab[0,0] ] # Solange die Todo-Liste nicht leer ist, wiederhole: while len(todo)>0: # Entferne eine Zelle aus der Todo-Liste, nenne diese «aktuell» aktuell = todo.pop() # Letzten Eintrag entfernen aktuell.mark = makeGreen(aktuell.mark) # Aktuelle Zelle grün print(lab) # Anzeigen time.sleep(0.1) # braucht import time ganz oben aktuell.mark = makeNormal(aktuell.mark) # Aktuelle Zelle wieder normal (weg aus Liste) # Für alle Richtungen $d$ von 0 bis und mit 3: for d in range(4): if aktuell.offen[d]: # Mauer offen? nb = aktuell.nachbar(d) if nb != None: # Existiert der Nachbar? if nb.mark==' ': # Noch nicht besucht? nb.mark = makeRed(markierung) # rote Markierung setzen markierung = naechsteMarkierung(markierung) # Nächste Markierung berechnen aktuell.mark=makeRed(aktuell.mark) # Aktuelle Zelle rot todo.append(aktuell) # Aktuelle Zelle hinten anfügen todo.append(nb) # Nachbarszelle hinten anfügen break # Bearbeitung der Richtungen stoppen.