Türme von Hanoi
Verfasst: Donnerstag 17. Dezember 2020, 16:48
Gute Tag zusammen,
Ich habe eine Frage und zwar soll ich die Türme von Hanoi programmieren und mit tkinter dann Animieren.
Nun bin ich schon recht weit gekommen (siehe Code unten). Jetzt häng ich nur bei dem Animieren, dass die Scheiben sich von einem Fleck zum anderen bewegen hin und her,wie man es bei den Türmen von Hanoi kennt.
Kann mir jemand bei der Problematik mit dem Animieren helfen, weil ich habe null Ahnung wie ich es machen soll 
LG Grüße
Ich habe eine Frage und zwar soll ich die Türme von Hanoi programmieren und mit tkinter dann Animieren.
Nun bin ich schon recht weit gekommen (siehe Code unten). Jetzt häng ich nur bei dem Animieren, dass die Scheiben sich von einem Fleck zum anderen bewegen hin und her,wie man es bei den Türmen von Hanoi kennt.
Code: Alles auswählen
import tkinter as tk
import time
# Fenster anlegen
window = tk.Tk()
window.title("Türme von Hanoi")
# Frame anlegen
frame = tk.Frame(window)
frame.pack()
# Canvas anlegen, Hintergrundfarbe und Größe wählen
canvas = tk.Canvas(frame, bg="#f0e0b0", width=600, height=400)
canvas.pack()
# Animation starten
class Hanoi:
def __init__(self, anzahl, ursprung, hilf, ziel):
self.staebe = {
ursprung: Stack(),
hilf: Stack(),
ziel: Stack()
}
self.staebe[ursprung].push(Scheibe.create_ini(self))
i = 1
m = 1
self.n = anzahl
while (self.n > i):
self.staebe[ursprung].push(Scheibe.create(self,m))
m += 1
self.n -= 1
def stabUmstapeln(self, n, ursprung, hilf, ziel):
if n >= 1:
self.stabUmstapeln(n - 1, ursprung, ziel, hilf)
self.scheibenUmstapeln(ursprung, ziel)
self.stabUmstapeln(n - 1, hilf, ursprung, ziel)
def scheibenUmstapeln(self, ursprung, ziel):
self.staebe[ziel].push(self.staebe[ursprung].pop())
# alle stangen neu schreiben
class Scheibe:
def create_ini(self):
item = canvas.create_rectangle(10, 400, 150, 380, fill='blue')
return item
def create(self,i):
item = canvas.create_rectangle(10+(10*i), 400-(20*i), 150-(10*i), 380-(20*i), fill='blue')
return item
class Stack:
def __init__(self):
self.liste = []
def it(self):
return self.liste
def push(self, element):
self.liste.append(element)
def push1(self, element):
self.liste.append(element)
def pop(self):
return self.liste.pop()
n = 8
stab = Hanoi(n, "A", "B", "C")
stab.stabUmstapeln(n, "A", "B", "C")
# Fenster offenhalten
window.mainloop()

LG Grüße