Simulation von Geburt/Tod und "richtige" Erkennung eines Hindernisses

demika

Mitglied
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:

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
 

Anhänge

  • boids.zip
    47 KB · Aufrufe: 7

AquaBall

Top Contributor
Für einen Programmieranfänger klingt das recht umfangreich.

Leider kann ich mit der Zip nichts anfangen, ist mir nich klar, wo das vorn und hinten ist.
Außerdem scheint Greenfoot.lib zu fehlen, ...

Aber vielleicht bin ich nur von Eclipse verwöhnt.
 

demika

Mitglied
Für einen Programmieranfänger klingt das recht umfangreich.

Leider kann ich mit der Zip nichts anfangen, ist mir nich klar, wo das vorn und hinten ist.
Außerdem scheint Greenfoot.lib zu fehlen, ...

Aber vielleicht bin ich nur von Eclipse verwöhnt.

Du hast vollkommen Recht, da scheint irgendwas schiefgelaufen zu sein. Habe es mit zwei verschiedenen Packer-Programmen versucht, beide Male hats nicht geklappt. Gibt es noch eine andere Möglichkeit einen ganzen Ordner hochzuladen? Denn ich denke ohne den Ursprungscode wird es schwierig.

Umfangreich? Die gesamte Vogelsimulation ist bereits da, ich möchte nur meine zwei Verbesserungen einbauen, was doch nicht so viel ist. Oder täusche ich mich?

Viele Grüße
 

AquaBall

Top Contributor
Das Projekt klingt für mich für Anfänger sehr hoch gegriffen.

In Eclipse kannst du sehr elegant das ganze Projekt exportieren.
 
M

Marcinek

Gast
Zum ausführen benötigst du Greenfoot.

Das ist ein Framework um Programieranfängern in einem Crashkurs super schnell ergebnisse zu liefern.

Das Szenario, das er hochgeladen hat, uss man in ein Verzeichnis von Greenfoot packen und dann mit Greenfoot öffnen.
 

demika

Mitglied
Ich denke es scheitert momentan an zwei Dingen:

1. wie kriege ich die aktuelle Gesamtzahl aller Objekte einer Klasse? Sprich ich möchte zu jeder Zeit wissen, wie viele Vögel grade leben (bzw. ich muss es nicht wissen, sondern Greenfoot).

Hatte mir folgendes gedacht, was allerdings aufgrund von List und int nicht funktioniert...

Java:
    private List killBirds(Class cls)
    {
        List allObjects = getWorld().getObjects(Boid.class);
        (allObjects*0.1) = currentAmount;
        for (int i = 0; i < currentAmount; i++)
        {
            int x = 500;
            int y = 200;
            addObject(new Boid(),x,y);
        }
    }

2. wie schaffe ich es, dass eine bestimmte Methode nur in bestimmten Abständen ausgeführt wird? Also bspw. wird die act-Methode in einer Dauerschleife ausgeführt und jedes 20. Mal soll dann die Methode XY ausgeführt werden.

Das mit dem exportieren mittels Eclipse hat irgendwie nicht funktioniert, habe im Anhang mal die jeweiligen java-Dateien der entsprechenden Klassen. Kann man ja einfach in Eclipse öffnen, hoffe es hilft.
 

Anhänge

  • Sky.java
    1,7 KB · Aufrufe: 5
  • SmoothActor.java
    3,5 KB · Aufrufe: 3
  • Boid.java
    5,8 KB · Aufrufe: 9
  • Vector.java
    3,4 KB · Aufrufe: 10
  • Tree.java
    481 Bytes · Aufrufe: 4
M

Marcinek

Gast
Also ich kenne mich mit Greenfood jetzt nicht aus. Kenne die api nicht.

Aber wenn das korrekt ist:
Code:
List allObjects = getWorld().getObjects(Boid.class);
, dann wirdt
Code:
allObject.size()
die anzahl von "Boids" liefern.

Was bedeutet das?

Code:
(allObjects*0.1) = currentAmount;


Zu 2) Das ist sehr trivial. Da jeder Actor ein Object ist, kannst du in einer member variable die aufrufe von act() zählen und bei x % 10 kannst du dann eine methode ausführen.

eine while() schleife in der act () ethode ist falsch.

Bezieht sich die Frage auf eine der Dateien im Anhang?

Ich habe keine Lust mir das durchzuelsen.
 

demika

Mitglied
Zu 2) Das ist sehr trivial. Da jeder Actor ein Object ist, kannst du in einer member variable die aufrufe von act() zählen und bei x % 10 kannst du dann eine methode ausführen.

eine while() schleife in der act () ethode ist falsch.

Bezieht sich die Frage auf eine der Dateien im Anhang?

Ich habe keine Lust mir das durchzuelsen.

Problem 1 ist gelöst. Problem 2, also der Aufruf einer Methode zu bestimmten Zeitpunkten, noch nicht. Hier mein Code, welcher sich compilieren lässt, allerdings werden leider nur ganz am Anfang einmal ein paar Boids zusätzlich erzeugt, jedoch nicht alle 10 Runden.
Java:
    private int timer = 0;  
      
    private void addBoids()  
    {  
        timer++;  
        if (timer < 10) return;  
        timer = 0;  
        int boidCount = getObjects(Boid.class).size();  
        int currentAmount = boidCount / 10;  
        for (int i = 0; i < currentAmount; i++)  
        {  
            int x = Greenfoot.getRandomNumber(900);  
            int y = Greenfoot.gerRandomNumber(200);  
            addObject(new Boid(),x,y);  
        }  
    }


Es gibt keine while-Schleife in der act() Methode, wenn man auf den "run" Button bei Greenfoot klickt wird die act() Methode so oft hintereinander aufgerufen, bis man auf stop klickt.
Bezieht sich zwar auf die Anhänge, diese muss man aber glaube ich nicht lesen um das Problem zu lösen...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Robert_Klaus Hamster java Simulation Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 5
B Scanner-If/else kleine Abhebungs-Simulation Java Basics - Anfänger-Themen 3
W Cache Simulation Java Basics - Anfänger-Themen 3
L Ampel-Simulation Java Basics - Anfänger-Themen 20
CT9288 Kleine Simulation programmieren, denkanstöße erbeten Java Basics - Anfänger-Themen 19
D Erste Schritte Jäger-Beute Simulation Java Basics - Anfänger-Themen 19
M Simulation - Algorithmus Java Basics - Anfänger-Themen 3
S Simulation auf Knopfdruck Java Basics - Anfänger-Themen 29
L Maus Click Simulation Java Basics - Anfänger-Themen 5
G menü in simulation Java Basics - Anfänger-Themen 3
maddin86 Simulation Wettrennen mit diversen Fahrzeugen Java Basics - Anfänger-Themen 9
X Monte Carlo Simulation (integral) Java Basics - Anfänger-Themen 4
frau-u Simulation eines Fernsehers Java Basics - Anfänger-Themen 4
krgewb Keine richtige Doku Java Basics - Anfänger-Themen 5
KogoroMori21 Wann ist der richtige Zeitpunkt, um sich Hilfe zu suchen? (Bin Informatik-Student) Java Basics - Anfänger-Themen 10
J Layout Manager, welcher ist der Richtige für mein Program? Java Basics - Anfänger-Themen 1
M Kennt jemand die richtige Lösung? Java Basics - Anfänger-Themen 7
R Ist Java das Richtige für mich? Java Basics - Anfänger-Themen 4
A Java die richtige Programmiersprache für mein Projekt? Java Basics - Anfänger-Themen 1
C Lotto 3, 4, 5, 6 Richtige nach x Ziehungen ermittelt.. Java Basics - Anfänger-Themen 7
D Richtige Kommentierung Klassenvariablen Java Basics - Anfänger-Themen 19
G Die richtige Methode aus einer DTO auszurufen Java Basics - Anfänger-Themen 27
E Die richtige Suche in der API Java Basics - Anfänger-Themen 1
L Richtige Reihenfolge der Dateien Java Basics - Anfänger-Themen 5
L Collections Ist eine Arraylist hier das richtige? Java Basics - Anfänger-Themen 12
E Mastermind programmieren, wie den falschen Platz aber richtige Farbe schecken? Java Basics - Anfänger-Themen 23
A OOP Richtige Verwendung von ArrayList und equals Java Basics - Anfänger-Themen 24
I Richtige Java-Version finden? Java Basics - Anfänger-Themen 17
Meeresgott Richtige Dokumentation Java Basics - Anfänger-Themen 1
Meeresgott Richtige Dokumentation Java Basics - Anfänger-Themen 22
P Klassen Richtige Anwendung einer Enum-Klasse Java Basics - Anfänger-Themen 11
H Ist Java überhaupt die richtige Sprache für das Projekt? Java Basics - Anfänger-Themen 8
G Lambda Ausdruck: Welche Methode ist die Richtige? Java Basics - Anfänger-Themen 1
A richtige Kombination aus Werte- und Referenztypen Java Basics - Anfänger-Themen 63
J Erste Schritte Verständnisfrage im Bezug auf das (richtige) Programmieren Java Basics - Anfänger-Themen 5
E Richtige Ausgabe nur mit toString() - Warum? Java Basics - Anfänger-Themen 4
S Das richtige Format für den SOAP Zugriff Java Basics - Anfänger-Themen 0
K Welche Java Version ist die richtige Java Basics - Anfänger-Themen 3
X Methoden Wort aus String löschen und richtige Verschachtelung Java Basics - Anfänger-Themen 17
X Ist Java für mich das richtige? Java Basics - Anfänger-Themen 10
F In ArrayList wird nicht der richtige Wert gespeichert Java Basics - Anfänger-Themen 6
S Richtige String-Variable finden Java Basics - Anfänger-Themen 3
K Richtige Pfadangabe einer Textdatei Java Basics - Anfänger-Themen 7
P Ist Java die richtige Programmiersprache dafür? Java Basics - Anfänger-Themen 29
Dit_ invokeLater | richtige Anwendung Java Basics - Anfänger-Themen 2
L eine richtige anfänger-frage Java Basics - Anfänger-Themen 3
J FileOutputStream richtige Pfadangabe? Java Basics - Anfänger-Themen 8
D Der richtige Layout Manager Java Basics - Anfänger-Themen 8
P Keine richtige Codeabarbeitung?! Java Basics - Anfänger-Themen 9
U Richtige Benutzung der API-Doku Java Basics - Anfänger-Themen 8
G Richtige Syntax für Bruch Java Basics - Anfänger-Themen 12
N Anfängerfrage richtige Syntax und Frage zu Vector Java Basics - Anfänger-Themen 7
G Polymorphismus und die richtige Anwendung Java Basics - Anfänger-Themen 6
B Ist Java das richtige für mich? Java Basics - Anfänger-Themen 12
W Java das richtige? Java Basics - Anfänger-Themen 9
L JTabbedPane, richtige Übergabe von Tabs Java Basics - Anfänger-Themen 18
M Welche Javaversion ist die Richtige? Java Basics - Anfänger-Themen 14
S Java Games Programieren. Der richtige Weg dorthin. Java Basics - Anfänger-Themen 4
M Java die richtige Sprache? Java Basics - Anfänger-Themen 4
S Web Mining - XML Filter der richtige Anstatz? Java Basics - Anfänger-Themen 2
W Java Web Start das richtige? Java Basics - Anfänger-Themen 11
J Richtige Auagabe in einer *.txt Java Basics - Anfänger-Themen 2
B Ist Java das richtige für folgendes Programm! Java Basics - Anfänger-Themen 2
T Bild drehen + richtige größe berechnen Java Basics - Anfänger-Themen 4
M Richtige Paarungen aus Array ausgeben Java Basics - Anfänger-Themen 2
S richtige antworten [%] ausgabe Java Basics - Anfänger-Themen 7
bernd Richtige Pfadangabe für das Kopieren von Dateien Java Basics - Anfänger-Themen 10
A Java wirklich das richtige? Java Basics - Anfänger-Themen 20
B Paar richtige Anfängerfragen Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben