importgreenfoot.*;//(World,Actor,GreenfootImage,GreenfootandMouseInfo) classRoverextendsActor { Displayanzeige; /** *thisfunctionistobeimplementedbytheuser *dependingontheneededactions */ voidact() { S66Nr3(7); } voidfahreUmHuegel(Stringrichtung) { Stringpri; Stringsec; if(richtung.equals("Hoch")){ pri="links"; sec="rechts"; }else{ if(richtung.equals("Runter")){ pri="rechts"; sec="links"; }else{ nachricht("JUNGEDUSPAST!"); return; } } drehe(pri); fahre(); drehe(sec); fahre(); fahre(); drehe(sec); fahre(); drehe(pri); } voidfahreBisHuegel() { while(!huegelVorhanden("vorne")) { fahre(); } } voidfahreZeileDreheHoch() { fahreBisHuegel(); fahreUmHuegel("Hoch"); fahreBisHuegel(); drehe("um"); fahreBisHuegel(); fahreUmHuegel("Runter"); fahreBisHuegel(); drehe("rechts"); fahre(); drehe("rechts"); } voidfahreZeileDreheRunter(booleangeheInNächsteZeile) { fahreBisHuegel(); fahreUmHuegel("Runter"); fahreBisHuegel(); drehe("um"); fahreBisHuegel(); fahreUmHuegel("Hoch"); fahreBisHuegel(); if(geheInNächsteZeile){ drehe("rechts"); fahre(); drehe("rechts"); }else{ drehe("um"); } } voidS66Nr3(intanzahlZeilen) { if(anzahlZeilen<3){ nachricht("IchmussmindestensdreiZeilenfahren!:("); return; } fahreZeileDreheHoch(); for(inti=1;i30) { returntrue; } } if(richtung=="vorne"&&rot==180||richtung=="rechts"&&rot==90||richtung=="links"&&rot==270) { if(getOneObjectAtOffset(-1,0,Huegel.class)!=null&&((Huegel)getOneObjectAtOffset(-1,0,Huegel.class)).getSteigung()>30) { returntrue; } } if(richtung=="vorne"&&rot==90||richtung=="rechts"&&rot==0||richtung=="links"&&rot==180) { if(getOneObjectAtOffset(0,1,Huegel.class)!=null&&((Huegel)getOneObjectAtOffset(0,1,Huegel.class)).getSteigung()>30) { returntrue; } } if(richtung=="vorne"&&rot==270||richtung=="rechts"&&rot==180||richtung=="links"&&rot==0) { if(getOneObjectAtOffset(0,-1,Huegel.class)!=null&&((Huegel)getOneObjectAtOffset(0,-1,Huegel.class)).getSteigung()>30) { returntrue; } } if(richtung!="vorne"&&richtung!="links"&&richtung!="rechts") { nachricht("Befehlnichtkorrekt!"); } returnfalse; } /** *DerRoverermitteltdenWassergehaltdesGesteinsaufseinerPositionundgibtdiesenaufdemDisplayaus. *SolltekeinObjektderKlasseGesteinvorhandensein,dannerscheinteineentsprechendeMeldungaufdemDisplay. */ voidanalysiereGestein() { if(gesteinVorhanden()) { nachricht("Gesteinuntersucht!Wassergehaltist"+((Gestein)getOneIntersectingObject(Gestein.class)).getWassergehalt()+"%."); Greenfoot.delay(1); removeTouching(Gestein.class); } else { nachricht("HieristkeinGestein"); } } /** *DerRovererzeugteinObjektderKlasseᅵMarkierungᅵaufseinerPosition. */ voidsetzeMarke() { getWorld().addObject(newMarke(),getX(),getY()); } /** **DerRovergibtdurcheinenWahrheitswert(trueoderfalse)zurᅵck,obsichaufseinerPositioneinObjektderMarkebefindet. *EineentsprechendeMeldungerscheintauchaufdemDisplay. */ booleanmarkeVorhanden() { if(getOneIntersectingObject(Marke.class)!=null) { returntrue; } returnfalse; } voidentferneMarke() { if(markeVorhanden()) { removeTouching(Marke.class); } } voidnachricht(StringpText) { if(anzeige!=null) { anzeige.anzeigen(pText); Greenfoot.delay(1); anzeige.loeschen(); } } voiddisplayAusschalten() { getWorld().removeObject(anzeige); } voidaddedToWorld(Worldworld) { setImage("images/rover.png"); world=getWorld(); anzeige=newDisplay(); anzeige.setImage("images/nachricht.png"); world.addObject(anzeige,7,0); if(getY()==0) { setLocation(getX(),1); } anzeige.anzeigen("Ichbinbereit"); } classDisplayextendsActor { GreenfootImagebild; Display() { bild=getImage(); } voidact() { } voidanzeigen(StringpText) { loeschen(); getImage().drawImage(newGreenfootImage(pText,25,Color.BLACK,newColor(0,0,0,0)),10,10); } voidloeschen() { getImage().clear(); setImage("images/nachricht.png"); } } classDirection{ Direction(intval){ this.value=val; } intvalue; }; }