/** * CaffeineJunky: ein einfacher Duke, der das Labyrinth * systematisch ablaeuft, indem er sich im links an der Wand * orientiert. Hat er die maximale Anzahl von Bohnen aufgenommen, * so kehrt er auf dem gleichen Weg zurueck. */ import algds.contest.Duke; public class CaffeineJunky extends Duke { boolean finished = false; int steps = 0; public CaffeineJunky() { } public void run () { while (! finished) { steps = 0; goShopping (); goHome (); drop (Duke.MAX_BEANS); } } private boolean atHome () { return getXPos() == 0 && getYPos () == 0 && getLevel () == 0; } private void goShopping () { boolean full = false; while (! full) { turn (Duke.TURN_LEFT); if (look () != Duke.WALL) forward (); else { while (look () == Duke.WALL) turn (Duke.TURN_RIGHT); forward (); } steps++; if (atHome ()) { finished = true; return; } take (Duke.MAX_BEANS); if (this.getNumOfBeans() == Duke.MAX_BEANS) { full = true; log ("go home\n"); } } } private void goHome () { turn (Duke.TURN_LEFT); turn (Duke.TURN_LEFT); if (! atHome ()) forward (); while (! atHome ()) { turn (Duke.TURN_RIGHT); if (look () != Duke.WALL) forward (); else { while (look () == Duke.WALL) turn (Duke.TURN_LEFT); forward (); } } turn (Duke.TURN_LEFT); turn (Duke.TURN_LEFT); } }