Hallo liebe Leute,
ich versuche das Spiel "Die Türme von Hanoi" in Visual Basic zu programmieren (de.wikipedia.org/wiki/Türme_von_Hanoi).
Wichtig hierfür ist ja der Randoffsche Algorithmus, der zur Lösung des Problems führt. Für die Speicherung der aktuellen Lösung soll ein List of Integer Array der Länge 3 verwendet werden, um die einzelnen Schritte jeweils abzuspeichern und ausgeben zu können. Der Benutzer soll den Ablauf des Programms verfolgen können, hierfür soll nach jedem Schritt eine ausreichende Wartezeit eingebaut werden. Weiterhin soll die aktuelle Belegung und die bisher erfolgten Bewegungen in jeweils einer Textbox ausgegben werden.
An sich habe ich einen Teil des Problems bereits gelöst (siehe Code). Allerdings halt ohne dieses List of Integer Array zu verwenden und die zweite Ausgabe mit der aktuellen Belegung der Türme. Vielleicht hat ja jemand eine Idee wie meinen bisherigen Code verändern bzw. ergänzen kann! Vielen Dank schon einmal.
ich versuche das Spiel "Die Türme von Hanoi" in Visual Basic zu programmieren (de.wikipedia.org/wiki/Türme_von_Hanoi).
Wichtig hierfür ist ja der Randoffsche Algorithmus, der zur Lösung des Problems führt. Für die Speicherung der aktuellen Lösung soll ein List of Integer Array der Länge 3 verwendet werden, um die einzelnen Schritte jeweils abzuspeichern und ausgeben zu können. Der Benutzer soll den Ablauf des Programms verfolgen können, hierfür soll nach jedem Schritt eine ausreichende Wartezeit eingebaut werden. Weiterhin soll die aktuelle Belegung und die bisher erfolgten Bewegungen in jeweils einer Textbox ausgegben werden.
An sich habe ich einen Teil des Problems bereits gelöst (siehe Code). Allerdings halt ohne dieses List of Integer Array zu verwenden und die zweite Ausgabe mit der aktuellen Belegung der Türme. Vielleicht hat ja jemand eine Idee wie meinen bisherigen Code verändern bzw. ergänzen kann! Vielen Dank schon einmal.
VB.NET-Quellcode
- Option Strict On
- Public Class Form1
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Dim n As Integer
- n = CInt(input.Value)
- 'Berechne die Lösung von der gegebenen Anzahl von Scheiben
- BewegeTurm(n, "0", "1", "2")
- Dim Anzahl() As String = Split(Output.Text, vbLf) 'Um Anzahl der Züge zählen zu können(nicht die schönste Variante und auch nicht so gedacht für die Aufgabe)
- MsgBox("Das Spiel ist beendet!" & vbLf & CType(Anzahl.Length - 1, String) & " Züge werden benötigt")
- End Sub
- Private Sub BewegeScheibe(ByVal n As Integer, ByVal Von As String, ByVal Zu As String)
- Threading.Thread.Sleep(1000) 'Wartezeit nach jeder Ausgabe
- Output.Text &= ("Scheibe " & n & " wurde von " & Von & " nach " & Zu & " verschoben." & vbCrLf)
- Update()
- End Sub
- Private Sub BewegeTurm(ByVal n As Integer, ByVal Start As String, ByVal Mitte As String, ByVal Ziel As String)
- If n > 1 Then 'Randoffsche Algorithmus als Lösungsvorlage
- BewegeTurm(n - 1, Start, Ziel, Mitte) 'Turm mit einer Scheibe weniger behandeln
- BewegeScheibe(n, Start, Ziel) ' von o nach 2 verschieben
- BewegeTurm(n - 1, Mitte, Start, Ziel)
- Else
- BewegeScheibe(n, Start, Ziel)
- End If
- End Sub
- End Class
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Scully77“ ()