Hallo zusammen,
ich bin noch ein Neuling wenn es ums Programmieren und dementsprechend auch um Java geht. Momentan bin ich dabei mit dem Programm Greenfoot eine eigene Simulation zu erstellen, bzw. ein bereits vorhandenes Szenario (siehe Anhang) zu erweitern. Dieses simuliert bisher einen Vogelschwarm. Nun möchte ich zwei Dinge hinzufügen:
1. sollen in festen Abständen Vögel sterben und neue Vögel "geboren" werden. Dabei hatte ich mir gedacht dass pro zehn Vögel ein neuer Vogel geboren werden soll. Dies soll in bestimmten Zyklen geschehen, bspw. alle 30 Runden. Ähnliches gilt für den Tod der Vögel: ebenfalls alle 30 Runden soll pro zwanzig Vögeln ein Tier sterben, also gelöscht werden. Dementsprechend: Geburtenrate 10%, Sterberate 5%.
2. Gibt es in dem Szenario nicht nur Vögel, sondern auch Bäume (welche allerdings nichts machen außer rumzustehen). Bisher ist es so, dass die Vögel den Bäumen zwar ausweichen, allerdings ein kleines Stück in den Baum "reinfliegen" ehe sie abdrehen. Lieber hätte ich es so, dass sobald der Rand eines Baums erreicht wird, der Vogel abdreht.
Soweit erstmal mein Plan. Für beide Probleme habe ich auch einen Ansatz, an der Umsetzung hapert es allerdings.
Zu 1. meine Idee war es, sich zuerst die gesamte Anzahl der Vögel über getObjects(bird.class) zu holen und diese dann mit 0,1 (Geburt) bzw. 0,05 (Tod) zu multiplizieren. Das jeweilige Ergebnis würde dann gerundet werden und alle 30 Runden die entsprechende Anzahl an Vögeln geboren werden bzw. verschwinden. Dafür hatte ich mir eine while-Schleife überlegt, welche grob so aussehen würde:
Gleiches dann halt für die sterbenden Vögel, allerdings mit der entsprechenden Zahl an Geburten und removeObject statt addObject. Keine Idee habe ich für die Frage, wie man es macht dass nur bei jedem dreißigsten Aufruf der act-Methode Vögel erzeugt/entfernt werden.
Zu 2. hier hatte ich eine zusätzliche Vogelklasse eingefügt, nur um zu testen ob meine Idee des Ausweichens funktioniert. Der Ansatz war es mit getObjectsInRange zu versuchen und zwar folgendermaßen:
Dummerweise drehen sich diese Vögel ununterbrochen im Kreis, egal wie nach sie an einem Baum sind.
Würde mich sehr über Hilfe freuen, nicht nur damit das Szenario entsprechend modifiziert werden kann, sondern auch um aus der Lösung lernen zu können.
Viele Grüße
ich bin noch ein Neuling wenn es ums Programmieren und dementsprechend auch um Java geht. Momentan bin ich dabei mit dem Programm Greenfoot eine eigene Simulation zu erstellen, bzw. ein bereits vorhandenes Szenario (siehe Anhang) zu erweitern. Dieses simuliert bisher einen Vogelschwarm. Nun möchte ich zwei Dinge hinzufügen:
1. sollen in festen Abständen Vögel sterben und neue Vögel "geboren" werden. Dabei hatte ich mir gedacht dass pro zehn Vögel ein neuer Vogel geboren werden soll. Dies soll in bestimmten Zyklen geschehen, bspw. alle 30 Runden. Ähnliches gilt für den Tod der Vögel: ebenfalls alle 30 Runden soll pro zwanzig Vögeln ein Tier sterben, also gelöscht werden. Dementsprechend: Geburtenrate 10%, Sterberate 5%.
2. Gibt es in dem Szenario nicht nur Vögel, sondern auch Bäume (welche allerdings nichts machen außer rumzustehen). Bisher ist es so, dass die Vögel den Bäumen zwar ausweichen, allerdings ein kleines Stück in den Baum "reinfliegen" ehe sie abdrehen. Lieber hätte ich es so, dass sobald der Rand eines Baums erreicht wird, der Vogel abdreht.
Soweit erstmal mein Plan. Für beide Probleme habe ich auch einen Ansatz, an der Umsetzung hapert es allerdings.
Zu 1. meine Idee war es, sich zuerst die gesamte Anzahl der Vögel über getObjects(bird.class) zu holen und diese dann mit 0,1 (Geburt) bzw. 0,05 (Tod) zu multiplizieren. Das jeweilige Ergebnis würde dann gerundet werden und alle 30 Runden die entsprechende Anzahl an Vögeln geboren werden bzw. verschwinden. Dafür hatte ich mir eine while-Schleife überlegt, welche grob so aussehen würde:
Java:
int i = 0
while (i < Anzahl der Geburten)
{
addObject(new bird(), Greenfoot.getRandomNumber(900), Greenfoot.getRandomNumber(700));
i = i + 1
}
Gleiches dann halt für die sterbenden Vögel, allerdings mit der entsprechenden Zahl an Geburten und removeObject statt addObject. Keine Idee habe ich für die Frage, wie man es macht dass nur bei jedem dreißigsten Aufruf der act-Methode Vögel erzeugt/entfernt werden.
Zu 2. hier hatte ich eine zusätzliche Vogelklasse eingefügt, nur um zu testen ob meine Idee des Ausweichens funktioniert. Der Ansatz war es mit getObjectsInRange zu versuchen und zwar folgendermaßen:
Java:
public void checkCollision()
{
List closeObjects = getObjectsInRange(15, Tree.class);
if (closeObjects != null)
{
turn(20);
}
}
Dummerweise drehen sich diese Vögel ununterbrochen im Kreis, egal wie nach sie an einem Baum sind.
Würde mich sehr über Hilfe freuen, nicht nur damit das Szenario entsprechend modifiziert werden kann, sondern auch um aus der Lösung lernen zu können.
Viele Grüße