import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class AB4 here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class AB4 extends Roboter
{
    /*#
     * Aufgabe 1: Spur invertieren
     */
    /** 
     * Der Roboter tauscht aus. Wo eine Scharube liegt, hebt er sie auf.
     * Wo keine liegt, legt er eine ab, wenn er noch Schrauben 
     * in seinem Vorrat hat.
     */
    public void tausche() {
        if (istAufGegenstand("Schraube")) { 
            aufnehmen();
        } 
        else {
            ablegen("Schraube");
        }
    }

    /** 
     * Der Roboter macht mehrere Dinge. Beschreibe in diesem Kommentar:
     * 
     */
    public void tauscheUndVor() {
        tausche();
        if (istVorneFrei()) { 
            einsVor();
        }
        // else ist nicht noetig, weil in dem Fall nichts gemacht wird!                 
    }

    /*#
     * Aufgabe 2: Tausche die Schraubenreihe bis zur Wand
     */
    public void tauscheBisWand() {
        while (!istWandVorne()){
            tauscheUndVor();
        }
        tausche();
    }

    /*#
     * Aufgabe 3: Fleckenfrei
     */
    public void umgeheOelfleck() {
        while (!istWandVorne()){
            if(istVorne("Oelfleck")) {
                dreheLinks();
                einsVor();
                dreheRechts();
                einsVor();
                einsVor();
                dreheRechts();
                einsVor();
                dreheLinks();
            }
            else {
                einsVor();
            }
        }
    }

    /*#
     * Aufgabe 4: Schluessel aufheben
     */
    public void sammleSchluessel() {
        if (istAufGegenstand("Schluessel")) aufnehmen();
    }

    /*#
     * Aufgabe 5: Sesam oeffne dich
     */
    public void oeffneTuer(){
        dreheLinks();
        if (istVorne("Schloss")) benutze("Schluessel");
        if (istVorne("Schalter")) benutze("Schalter");
        dreheRechts();
    }

    /*#
     * Hilfsmethode fuer Aufgabe 9
     */
    public void laufeBisWand() {
        while(istVorneFrei()) {
            einsVor();
        }
    }

    /*#
     * Aufgabe 9: Labyrinth
     */
    public void labyrinth() {
        while(!(istWandVorne() && istWandLinks() && istWandRechts())) {
            laufeBisWand();
            if(!istWandLinks()) {
                dreheLinks();
            } else {
                if(!istWandRechts()) {
                    dreheRechts();
                }
            }
        }
    }

    /*#
     * Einsatz 4: Bitte den Namen nicht aendern!
     */
    public void einsatz4() {
        labyrinth();
        oeffneTuer();
        labyrinth();
        oeffneTuer();
        labyrinth();
        oeffneTuer();
        einsVor();
        einsVor();
        dreheLinks();
        while(istVorneFrei()) {
            einsVor();
            dreheLinks();
            if (istVorne("Schalter")) benutze("Schalter");
            dreheRechts();
        }
    }
}
