Lernpfad:Lerntheke Marsrover/19

Aus Informatik-Box
Zur Navigation springen Zur Suche springen
Programme strukturieren II
Greenfoot Rover.png
Arbeitsauftrag
  1. Zerlege jeweils das Problem in sinvolle Teilprobleme (mindestens eins). Implementiere dann pro Teilproblem eine Methode und kombiniere die neuen Befehle dann zu einer Gesamtlösung.


1) Der Rover soll das Gestein analysieren. Dazu soll er dem Weg aus Marken folgen, indem er immer bis zur nächsten Marke fährt und sich nach links dreht.
Kartendaten:
".\nM....M\n.M.......M\n........G.....M\n.\n.\n...M........M\n.\n...M.M\n.\n.M..........M\nM.....R..M....M"
2) Der Rover soll auf jedem Feld eine Marke ablegen.
Kartendaten:
"HHHHHHHHHHHHHHH\nH...H.........H\nH.........H...H\nH....H........H\nH..........H..H\nH...H.........H\nH.............H\nH......H......H\nH..H..........H\nH........H....H\nHR..H.........H\nHHHHHHHHHHHHHHH"
Lösung zu 1)
    public void act() {
        while( !gesteinVorhanden() ) {
            fahreZuMarke();
        }
        analysiereGestein();
    }

    public void fahreZuMarke() {
        while( !markeVorhanden() && !gesteinVorhanden() ) {
            fahre();
        }
        entferneMarke();
        drehe("links");
    }
Lösung zu 2)
    public void act() {
        String richtung = "links";
        do {
            fahreBisHuegel();
            fahreUmHuegel();
            fahreBisHuegel();
            wechseleReihe(richtung);
            if( richtung == "links" )
                richtung = "rechts";
            else
                richtung = "links";
        } while( !huegelVorhanden("links") );
    }

    public void fahreBisHuegel() {
        while( !huegelVorhanden("vorne") ) {
            setzeMarke();
            fahre();
        }
        setzeMarke();
    }
    
    public void fahreUmHuegel() {
        drehe("links");
        if( !huegelVorhanden("vorne") ) {
            fahre();
            drehe("rechts");
            fahre();
            fahre();
            drehe("rechts");
            fahre();
            drehe("links");
        } else {
            drehe("links");
            drehe("links");
            fahre();
            drehe("links");
            fahre();
            fahre();
            drehe("links");
            fahre();
            drehe("rechts");
        }
    }
    
    public void wechseleReihe( String pRichtung ) {
        drehe(pRichtung);
        fahre();
        drehe(pRichtung);
    }