Greenfoot tells me there is an error in the code, but doesn't show me any indication of an error, so it can't be a syntax issue. I tried playing around with the brackets and I restarted Greenfoot, nothing helps. I am trying to do a simple program which would make a Rover move and collected Rocks every time there is one on the field it stands on, and if there are no rocks it places a mark.
Here's the code, has anyone an idea on how to fix this?
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
public class Rover extends Actor
{
private Display anzeige;
/**
* Die Anweisungen der Methode act werden ausgeführt, wenn der Act-Button
* im Hauptfenster geklickt wird.
*/
public void act()
{
while (!huegelVorhanden("vorne"))
{
fahre();
if (gesteinVorhanden())
nimmGestein();
markeVorhanden();
}
}
/**
* Der Rover bewegt sich ein Feld in Fahrtrichtung weiter.
* Sollte sich in Fahrtrichtung ein Objekt der Klasse Huegel befinden oder er sich an der Grenze der Welt befinden,
* dann erscheint eine entsprechende Meldung auf dem Display.
*/
public void fahre()
{
int posX = getX();
int posY = getY();
if (huegelVorhanden("vorne"))
{
nachricht("Zu steil!");
}
else if (getRotation() == 270 && getY() == 1)
{
nachricht("Ich kann mich nicht bewegen");
}
else
{
move(1);
Greenfoot.delay(1);
}
if (posX == getX() && posY == getY() && !huegelVorhanden("vorne"))
{
nachricht("Ich kann mich nicht bewegen");
}
}
/**
* Der Rover dreht sich um 90 Grad in die Richtung, die mit richtung („links“ oder „rechts“) übergeben wurde.
* Sollte ein anderer Text (String) als "rechts" oder "links" übergeben werden, dann erscheint eine entsprechende Meldung auf dem Display.
*/
public void drehe(String richtung)
{
if (richtung == "rechts")
{
turn(90);
//setRotation(getRotation()+90);
}
else if (richtung == "links")
{
turn(-90);
// setRotation(getRotation()-90);
}
else
{
nachricht("Befehl nicht korrekt!");
}
}
/**
* Der Rover gibt durch einen Wahrheitswert (true oder false )zurück, ob sich auf seiner
* Position ein Objekt der Klasse Gestein befindet.
* Eine entsprechende Meldung erscheint auch auf dem Display.
*/
public boolean gesteinVorhanden()
{
if (getOneIntersectingObject(Gestein.class) != null)
{
nachricht("Gestein gefunden!");
return true;
}
nachricht("Kein Gestein vorhanden!");
return false;
}
public void bergSeiteAbfahren()
{
while (huegelVorhanden("rechts"))
{
fahre();
}
}
public void steineSammeln()
{
fahren();
while (gesteinVorhanden())
{
nimmGestein();
fahren();
}
setzeMarke();
}
/**
* Der Rover überprüft, ob sich in richtung ("rechts", "links", oder "vorne") ein Objekt der Klasse Huegel befindet.
* Das Ergebnis wird auf dem Display angezeigt.
* Sollte ein anderer Text (String) als "rechts", "links" oder "vorne" übergeben werden, dann erscheint eine entsprechende Meldung auf dem Display.
*/
public boolean huegelVorhanden(String richtung)
{
int rot = getRotation();
if (richtung == "vorne" && rot == 0 || richtung == "rechts" && rot == 270 || richtung == "links" && rot == 90)
{
if (getOneObjectAtOffset(1, 0, Huegel.class) != null)
{
return true;
}
}
if (richtung == "vorne" && rot == 180 || richtung == "rechts" && rot == 90 || richtung == "links" && rot == 270)
{
if (getOneObjectAtOffset(-1, 0, Huegel.class) != null)
{
return true;
}
}
if (richtung == "vorne" && rot == 90 || richtung == "rechts" && rot == 0 || richtung == "links" && rot == 180)
{
if (getOneObjectAtOffset(0, 1, Huegel.class) != null)
{
return true;
}
}
if (richtung == "vorne" && rot == 270 || richtung == "rechts" && rot == 180 || richtung == "links" && rot == 0)
{
if (getOneObjectAtOffset(0, -1, Huegel.class) != null)
{
return true;
}
}
if (richtung != "vorne" && richtung != "links" && richtung != "rechts")
{
nachricht("Befehl nicht korrekt!");
}
return false;
}
/**
* Der Rover nimmt das Gestein auf seiner Position auf.
* Sollte kein Objekt der Klasse Gestein vorhanden sein, dann erscheint
* eine entsprechende Meldung auf dem Display.
*/
public void nimmGestein()
{
if (gesteinVorhanden())
{
Greenfoot.delay(1);
removeTouching(Gestein.class);
}
else
{
nachricht("Hier ist kein Gestein");
}
}
/**
* Der Rover erzeugt ein Objekt der Klasse „Marke“ auf seiner Position.
*/
public void setzeMarke()
{
getWorld().addObject(new Marke(), getX(), getY());
}
/**
* *Der Rover gibt durch einen Wahrheitswert (true oder false )zurück,
* *ob sich auf seiner Position ein Objekt der Marke befindet.
* Eine entsprechende Meldung erscheint auch auf dem Display.
*/
public boolean markeVorhanden()
{
if (getOneIntersectingObject(Marke.class) != null)
{
nachricht("Beep Boop");
return true;
}
nachricht("Keine Marke vorhanden!");
return false;
}
public void entferneMarke()
{
if (markeVorhanden())
{
removeTouching(Marke.class);
}
}
private void nachricht(String pText)
{
if (anzeige != null)
{
anzeige.anzeigen(pText);
Greenfoot.delay(1);
anzeige.loeschen();
}
}
private void displayAusschalten()
{
getWorld().removeObject(anzeige);
}
protected void addedToWorld(World world)
{
setImage("images/rover.png");
world = getWorld();
anzeige = new Display();
anzeige.setImage("images/nachricht.png");
world.addObject(anzeige, 7, 0);
if (getY() == 0)
{
setLocation(getX(), 1);
}
anzeige.anzeigen("Ich bin bereit");
}
class Display extends Actor
{
GreenfootImage bild;
public Display()
{
bild = getImage();
}
public void act()
{
}
public void anzeigen(String pText)
{
loeschen();
getImage().drawImage(new GreenfootImage(pText, 25, Color.BLACK, new Color(0, 0, 0, 0)), 10, 10);
}
public void loeschen()
{
getImage().clear();
setImage("images/nachricht.png");
}
}