Java Ameisen programmieren und veränder?
Und zwar muss ich für die Uni ein Programm in InteliJ(Java) so verändern das ich 50 Ameisen habe, welche sich Random drehen und dann dementsprechend in die Richtung einen Schritt laufen kann in die Sie grade guckt. Sie sollen in einem Border sein und wenn eine Ameise den rechten Rand berührt soll sie verschwinden und eine neue soll im Punkt(100/100) neu Spawnen.
Bis jetzt habe ich nur eine for loop Programmiert, welcher auf funktionert. Problem ist da bei doSimulationStep nur "ant" definiert ist im moment, bewegt sich auch nur eine Ameise während der rest auf dem Platz steht.
Falls mir jemand irgendwie weiter helfen kann ist das super, gerne eigentlich nur konkrete und gut beschriebene beispiele und nicht einfach die Lösung schicken, da ich mich im Moment noch sehr schwer tue mit dem Programmieren.
Class Ant:
/**
* Mit der Klasse {@link Ant} werden Ameisen in der Simulation funktional
* abgebildet. Ameisen definieren ihre Position und Rotation (in Grad).
*
* @see AntModelGraphic
*/
public class Ant {
private final AntModelGraphic graphic;
private String antText;
private double x, y, rotation, degree;
private final Random random = new Random();
public Ant(double x, double y, double rotation) {
this.x = x;
this.y = y;
this.rotation = rotation;
this.antText = "";
graphic = new AntModelGraphic();
}
/**
* Führt einen Simulationsschritt durch und lässt die Ameise jeweils einen
* Schritt nach rechts machen.
*/
public void doSimulationStep() {x++;
}
public double getRotation() { return rotation; }
public double getX() { return x; }
public double getY() { return y; }
Class Simulation:
/**
* Dies Klasse bildet das zentrale Element der Simulation. Sie koordiniert die
* Bewegungen, das Erscheinen und Verschwinden der Simulationsteilnehmer. Die
* Methode {@link Simulation#doSimulationStep()} wird vom Taktgeber der
* grafischen Oberfläche in regelmäßigen Abständen aufgerufen.
*
* @see AntApplication#SIMULATION_FRAME_LENGTH
*/
public class Simulation {
private Ant ant;
/** Fügt 50 Ameisen hinzu am Punkt (x/y)
* Added eine Ameise, wenn es unter 50 Ameisen sind
* @param uiManager
*/
public Simulation(UiManager uiManager) {
for (int i = 0; i < 50; i++) {
ant = new Ant(450, 300, 0);
uiManager.add(ant);
}
}
/**
* Führt einen Simulationsschritt durch.
*/
public void doSimulationStep() {
ant.doSimulationStep();
}
}
1 Antwort
In deiner Schleife erstellst du ja alle 50 Ameisen (die an einer Stelle stehen) und weist bei jeder neu erstellen dessen Objekt deinem Attribut ant zu. Das Attribut wird also mit jeder Iteration mit einer neuen Ameise überschrieben und am Ende verweist es auf die zuletzt erzeugte Ameise, die du sich drehen lässt.
Je Simulationsschritt solltest du stattdessen über alle erzeugten Ameisen iterieren (du hast sie ja im UiManager gespeichert) und je Ameise deren Simulationsschritt aufrufen.
Des Weiteren solltest du schauen, dass jede Ameise in eine etwas andere Richtung schaut, andernfalls siehst du wieder nur eine Ameise über das Feld tänzeln, da sie sich mit den anderen Ameisen überlagert.