PythonKara Pledge-Algorithmus

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
itsannahuh
User
Beiträge: 1
Registriert: Mittwoch 21. September 2016, 18:40

Also, ich habe hier leider ein kleines Problemchen.
Es geht um den Pledge-Algorithmus, bei dem es darauf ankommt, aus einem beliebigen Labyrinth herauszukommen.
Meine Partnerin und ich dachten uns, dass wir das unserem Kurs am besten am Beispiel von Kara veranschaulichen, allerdings will sich der ''süße Marienkäfer'' nicht drehen, wenn ein Baum rechts von ihr steht.^^ Wir haben alles versucht es IRGENDWIE mit hineinzubekommen, aber was passiert? Sie bleibt einfach stur stehen. :evil:
Ich hoffe uns kann jemand helfen.

Code: Alles auswählen

def drehung(u):
  kara.turnRight() 
  if not kara.treeFront() and not kara.onLeaf():
    kara.move()
  if kara.treeLeft() and not kara.treeFront():
    u += 1
   # kara.putLeaf()
  else:
    kara.turnLeft()
    kara.turnLeft()
    if not kara.onLeaf():
      kara.move()
    if not kara.treeFront() and not kara.onLeaf():
      kara.move()
    if kara.treeLeft() and not kara.treeFront():
     u -=1
     #kara.putLeaf()
  return u
first = 1
umdrehungen = 0
while not kara.mushroomFront():
  #gerade bis wand:
  while not kara.treeFront() and not kara.mushroomFront():
      kara.move()
      first = 1
      #kara.putLeaf()
     #wand folgen, bis umdrehungen ==0:
  

  while ((not umdrehungen == 0) or (first ==1)) and not kara.mushroomFront():
    first = 0
    umdrehungen = drehung(umdrehungen)
    #print(umdrehungen)
    while (kara.treeRight() or kara.treeLeft()) and not kara.treeFront() and not kara.mushroomFront():
      kara.move()
    #umdrehungen = drehung(umdrehungen)
    #print(umdrehungen)
        
BlackJack

@itsannahuh: Was sind denn das für Sachen auf dem Spielfeld? Bäume sind Hindernisse? Pilze sind…? Und was ist mit den Blättern? Da gibt's Bedingungen zu, aber der Käfer hebt keine auf und legt keine ab. Was haben die in dem Algorithmus überhaupt verloren? Und `u` in `drehung` scheint mir nicht mit der Drehung des Käfers im Einklang zu stehen. Die Prosabeschreibung des Algorithmus auf Wikipedia habe ich da anders verstanden.

`first` scheint ein Wahrheitswert zu sein, dafür sollte man `True` und `False` statt 1 und 0 verwenden um das klarer zu machen. ``not umdrehungen == 0`` würde man eher als ``umdrehungen != 0`` ausdrücken.

Geht doch einfach mal selbst mit Papier und Stift das Programm Schritt für Schritt durch und vergleicht wo es sich nicht so verhält wie Ihr das erwartet habt. Das ist dann die bzw. eine Stelle wo ein Fehler ist.
BlackJack

@itsannahuh: Ich habe mir dieses PythonKara jetzt mal angeschaut (http://www.swisseduc.ch/informatik/kara ... ythonkara/) und das Feld und so weiter muss man auf dem Papier ja gar nicht nachvollziehen, es reicht den Programmzustand und die Variablen beim nachvollziehen des Programmablaufs selber zu notieren. Denn für Feld und Bewegungen kann man ja die grafische Oberfläche verwenden.

Wie sieht denn die Welt aus, in der das ablaufen soll? Falls der Inhalt der *.world-Datei zu gross ist um ihn hier in einem Beitrag zu veröffentlichen, könntest Du ihn beispielsweise bei http://pastebin.com/ hochladen und einen Link hier in einem Beitrag veröffentlichen.
Antworten