Hallo,
ich bin absoluter Java-Anfänger (10. Klasse) und habe bei einer Projektarbeit ein Problem. Google und Sufu habe ich gemäß dem ersten Post hier im Forum schon benutzt - kein Ergebnis. Und das hier sind nicht meine Hausuafgaben, das ist eine Projektarbeit und ich verzweifel gerade wirklich daran.
Die Aufgabe war, in Greenfoot ein Pferderennen zu programmieren. Pferde laufen also von links nach rechts über die Welt Treffen die Pferde auf ein Hindernis, müssen sie 3 Runden aussetzen, bevor sie das Hindernis umrunden dürfen. Hier liegt mein Problem.
Ich habe mir dazu schon Gedanken gemacht, und zwar muss ich es irgendwie schaffen, dass
1. Ein Pferd, das vor einem Hindernis ist, aussetzt. Die anderen müssen aber weiterlaufen
2. Das aussetzende Pferd merkt, wie oft es schon ausgesetzt hat
Falls ihr irgendwas nachgucken möchtet, poste ich mal den kompletten Quelltext vom Pferd:
In die Anweisung "act" unter "if(hindernisVorne()){" muss das Pferd 3 Runden aussetzen.
Ich bitte um schnelle Hilfe und bedanke mich im Voraus!
ich bin absoluter Java-Anfänger (10. Klasse) und habe bei einer Projektarbeit ein Problem. Google und Sufu habe ich gemäß dem ersten Post hier im Forum schon benutzt - kein Ergebnis. Und das hier sind nicht meine Hausuafgaben, das ist eine Projektarbeit und ich verzweifel gerade wirklich daran.
Die Aufgabe war, in Greenfoot ein Pferderennen zu programmieren. Pferde laufen also von links nach rechts über die Welt Treffen die Pferde auf ein Hindernis, müssen sie 3 Runden aussetzen, bevor sie das Hindernis umrunden dürfen. Hier liegt mein Problem.
Ich habe mir dazu schon Gedanken gemacht, und zwar muss ich es irgendwie schaffen, dass
1. Ein Pferd, das vor einem Hindernis ist, aussetzt. Die anderen müssen aber weiterlaufen
2. Das aussetzende Pferd merkt, wie oft es schon ausgesetzt hat
Falls ihr irgendwas nachgucken möchtet, poste ich mal den kompletten Quelltext vom Pferd:
Java:
public class pferd extends Actor
{
/**
* Es wird überprüft, ob sich das Pferd auf das nächste Feld in Blickrichtung bewegen kann. Es kann sich nicht bewegen, wenn die Weltgrenze oder ein Hindernis vor ihm ist.
*/
public boolean kannBewegen()
{
if (this.hindernisVorne())
{
return false;
}
if (this.getRotation() == 0 && this.getX() == this.getWorld().getWidth()-1)
{
return false;
}
if (this.getRotation() == 90 && this.getY() == this.getWorld().getHeight()-1)
{
return false;
}
if (this.getRotation() == 180 && this.getX() == 0)
{
return false;
}
if (this.getRotation() == 270 && this.getY() == 0)
{
return false;
}
return true;
}
/**
* Das Pferd "wirft eine Münze" (es besteht 50 prozentige Chance), ob es sich ein Feld in Blickrichtung bewegt oder nicht. Befindet sich vor dem Pferd die Weltgrenze oder ein Hindernis, bewegt es sich nicht.
*/
public void zufallBewegen()
{
int lRichtung = this.getRotation();
int iStep = Greenfoot.getRandomNumber(2);
if(this.kannBewegen());
{
switch(lRichtung)
{
case 0 :
this.setLocation(getX() + iStep, getY());
break;
case 90 :
this.setLocation(getX(), getY() + iStep);
break;
case 180 :
this.setLocation(getX() - iStep, getY());
break;
case 270 :
this.setLocation(getX(), getY() - iStep);
break;
}
Greenfoot.delay(1);
}
}
/**
* Das Pferd bewegt sich auf das nächste Feld in Blickrichtung. Befindet sich vor dem Pferd die Weltgrenze oder ein Hindernis, bewegt es sich nicht.
*/
public void bewegen()
{
int lRichtung = this.getRotation();
if(this.kannBewegen());
{
switch(lRichtung)
{
case 0 :
this.setLocation(getX() + 1, getY());
break;
case 90 :
this.setLocation(getX(), getY() + 1);
break;
case 180 :
this.setLocation(getX() - 1, getY());
break;
case 270 :
this.setLocation(getX(), getY() - 1);
break;
}
Greenfoot.delay(1);
}
}
/**
* Das Pferd dreht sich um 90° nach rechts, ausgehend von der Blickrichtung.
*/
public void rechtsDrehen()
{
this.setRotation((getRotation()+90) % 360);
Greenfoot.delay(1);
}
/**
* Das Pferd dreht sich um 90° nach links, ausgehend von der Blickrichtung.
*/
public void linksDrehen()
{
this.setRotation((getRotation()+270) % 360);
Greenfoot.delay(1);
}
/**
*Es wird überprüft, ob sich auf dem nächsten Feld in Blickrichtung des Pferdes ein Hindernis befindet.
*/
public boolean hindernisVorne()
{
int lRichtung = this.getRotation();
if (lRichtung == 0 && this.getOneObjectAtOffset(1, 0, hindernis.class)!= null)
{
return true;
}
if (lRichtung == 90 && this.getOneObjectAtOffset(0, 1, hindernis.class)!= null)
{
return true;
}
if (lRichtung == 180 && this.getOneObjectAtOffset(-1, 0, hindernis.class)!= null)
{
return true;
}
if (lRichtung == 270 && this.getOneObjectAtOffset(0, -1, hindernis.class)!= null)
{
return true;
}
return false;
}
/**
* Es wird überprüft, ob sich ein Feld rechts der Blickrichtung des Pferdes ein Hindernis befindet.
*/
public boolean hindernisRechts()
{
int lRichtung = this.getRotation();
if (lRichtung == 0 && this.getOneObjectAtOffset(0, 1, hindernis.class)!= null)
{
return true;
}
if (lRichtung == 90 && this.getOneObjectAtOffset(-1, 0, hindernis.class)!= null)
{
return true;
}
if (lRichtung == 180 && this.getOneObjectAtOffset(0, -1, hindernis.class)!= null)
{
return true;
}
if (lRichtung == 270 && this.getOneObjectAtOffset(1, 0, hindernis.class)!= null)
{
return true;
}
return false;
}
/**
* Es wird überprüft, ob sich ein Feld links der Blickrichtung des Pferdes ein Hindernis befindet.
*/
public boolean hindernisLinks()
{
int lRichtung = this.getRotation();
if (lRichtung == 0 && this.getOneObjectAtOffset(0, -1, hindernis.class)!= null)
{
return true;
}
if (lRichtung == 90 && this.getOneObjectAtOffset(1, 0, hindernis.class)!= null)
{
return true;
}
if (lRichtung == 180 && this.getOneObjectAtOffset(0, 1, hindernis.class)!= null)
{
return true;
}
if (lRichtung == 270 && this.getOneObjectAtOffset(-1, 0, hindernis.class)!= null)
{
return true;
}
return false;
}
/**
* Es wird überprüft, ob sich in Blickrichtung des Pferdes noch ein Feld befindet.
*/
public boolean anGrenze()
{
if (this.getX()+1>=this.getWorld().getWidth())
{return true;}
return false;
}
/**
* Das Pferd umrundet ein Hindernis, indem es nach rechts unten geht, anschließend um das Hindernis herum und sich abschließend wieder in die Anfangsrichtung ausrichtet.
*/
public void hindernisUmrunden()
{
rechtsDrehen();
bewegen();
linksDrehen();
bewegen();
bewegen();
linksDrehen();
bewegen();
rechtsDrehen();
}
/**
* Das Pferd bewegt sich mit 50 prozentiger Chance auf das nächste Feld in Blickrichtung oder es bewegt sich gar nicht. Trifft es auf ein Hindernis, umrundet das Pferd das Hindernis nach rechts. Befindet sich in Blickrichtung des Pferdes die Weltgrenze, wird Greenfoot gestoppt und es erscheint die Meldung "Gewonnen!".
*/
public void act()
{
if(!hindernisVorne()){
zufallBewegen();
}
if(hindernisVorne()){
hindernisUmrunden();
}
if(anGrenze()){
System.out.println("Gewonnen!");
Greenfoot.playSound("applaus.WAV");
Greenfoot.stop();
}
}
}
In die Anweisung "act" unter "if(hindernisVorne()){" muss das Pferd 3 Runden aussetzen.
Ich bitte um schnelle Hilfe und bedanke mich im Voraus!
Zuletzt bearbeitet von einem Moderator: