Towers of Hanoi



  • Hi,

    ich möchte ein C-Programm für ein Spiel erstellen (Towers of Hanoi).

    Der Spielablauf soll folgender sein.
    Der Spieler soll eingeben können von welcher Scheibe zu welchem Turm transveriert werden soll. -Beispiel: Scheibe oberste Scheibe zu Turm C.

    Folgenden Code habe ich bei Wiki (http://de.wikipedia.org/wiki/Türme_von_Hanoi)gefunden.

    bewege(3,1,2,3) {
    bewege(2,1,3,2) {
    bewege(1,1,2,3) {
    bewege(0,1,3,2){};
    verschiebe oberste Scheibe von 1 nach 3;
    bewege(0,2,1,3){};
    };
    verschiebe oberste Scheibe von 1 nach 2;
    bewege(1,3,1,2){
    bewege(0,3,2,1){};
    verschiebe oberste Scheibe von 3 nach 2;
    bewege(0,1,3,2){};
    };
    };
    verschiebe oberste Scheibe von 1 nach 3;
    bewege(2,2,1,3){
    bewege(1,2,3,1){
    bewege(0,2,1,3){};
    verschiebe oberste Scheibe von 2 nach 1;
    bewege(0,3,2,1){};
    };
    verschiebe oberste Scheibe von 2 nach 3;
    bewege(1,1,2,3){
    bewege(0,1,3,2){};
    verschiebe oberste Scheibe von 1 nach 3;
    bewege(0,2,1,3){};
    };
    };
    };

    Für die Aufforderung an den Spieler (welche Scheibe zu welchem Turm verschoben wird), kann ich programmieren, aber ich weiß nicht wie ich das mit dem obigen Code "verschachtel".

    Ich dachte an eine Switch-case Anweisung oder an eine if-else-if Schleife.
    Ich hab es auch schon in eine Switch-case Anweisung eingebaut und bin gescheitert...

    Hat jemand so ein ähnliches Problem schonmal gehabt?

    Wäre cool wenn mir jemand bei meinem Problem helfen kann.

    gruß bernhard



  • michi8418 schrieb:

    Folgenden Code habe ich bei Wiki (http://de.wikipedia.org/wiki/Türme_von_Hanoi)gefunden.

    bewege(3,1,2,3) {
    bewege(2,1,3,2) {
    bewege(1,1,2,3) {
    bewege(0,1,3,2){};
    verschiebe oberste Scheibe von 1 nach 3;
    bewege(0,2,1,3){};
    };
    verschiebe oberste Scheibe von 1 nach 2;
    bewege(1,3,1,2){
    bewege(0,3,2,1){};
    verschiebe oberste Scheibe von 3 nach 2;
    bewege(0,1,3,2){};
    };
    };
    verschiebe oberste Scheibe von 1 nach 3;
    bewege(2,2,1,3){
    bewege(1,2,3,1){
    bewege(0,2,1,3){};
    verschiebe oberste Scheibe von 2 nach 1;
    bewege(0,3,2,1){};
    };
    verschiebe oberste Scheibe von 2 nach 3;
    bewege(1,1,2,3){
    bewege(0,1,3,2){};
    verschiebe oberste Scheibe von 1 nach 3;
    bewege(0,2,1,3){};
    };
    };
    };

    Nein.
    Der Code ist

    function bewege (Zahl i, Stab a, Stab b, Stab c) {
        falls (i > 0) {
           bewege(i-1, a, c, b);
           verschiebe oberste Scheibe von a nach c;
           bewege(i-1, b, a, c);
        }
    }
    

    Statt "verschiebe" kannste printf nehmen und ausgeben, von wo nach wo die Scheibe gelegt werden soll. Und das war auch schon alles.

    michi8418 schrieb:

    Ich dachte an eine Switch-case Anweisung oder an eine if-else-if Schleife.
    Ich hab es auch schon in eine Switch-case Anweisung eingebaut und bin gescheitert...

    Du mußt erstmal Rekursion verstehen, bevor Du diese faszinierend kurze Funktion schaffst.



  • volkard schrieb:

    Hat jemand so ein ähnliches Problem schonmal gehabt?

    Jemand? Dutzende!

    Suche im Forum mal nach Hanoi.


Anmelden zum Antworten