Ihre Aufgabe besteht darin, ein Modell einer parametrisierten Insel zu programmieren, die aus einer Reihe von Orten besteht (z. B. einer 100x20-Matrix). Die Standorte werden mit Pflanzen und Tieren besiedelt. Tiere können:

  • Pflanzen und/oder andere Tiere essen (sofern es an ihrem Standort geeignete Nahrung gibt),
  • umziehen (in benachbarte Orte),
  • Rasse (wenn es an einem Ort zwei Gleiche gibt),
  • verhungern oder gefressen werden.

OOP

Wenn Sie Ihren Tierbestand erstellen, sollten Sie OOP so oft wie möglich verwenden: Alle Arten werden von einer abstrakten Tierklasse abgeleitet, die das Verhalten enthält, das allen Tieren gemeinsam ist. Wenn bestimmte Tiere bestimmte Merkmale in Bezug auf Fütterung, Fortpflanzung, Bewegung usw. aufweisen, müssen sie die Methoden der Animal-Klasse überschreiben.

Folgendes müssen Sie tun:

1. Erstellen Sie eine Klassenhierarchie:

  • Fleischfresser : Wolf , Boa , Fuchs , Bär , Adler

  • Pflanzenfresser : Pferd , Hirsch , Kaninchen , Maus , Ziege , Schaf , Wildschwein , Büffel , Ente , Raupe

  • Pflanzen

Die folgende Tabelle zeigt, wie wahrscheinlich es ist, dass ein Tier „Futter“ frisst, wenn es sich am selben Ort wie dieses „Futter“ befindet. Schauen wir uns die Situation an, in der „ein Wolf ein Kaninchen frisst“. Die Zahl in der Tabelle ist 60. Das heißt, wenn sich ein Wolf und ein Kaninchen am selben Ort befinden, besteht eine 60-prozentige Chance, dass der Wolf das Kaninchen frisst. Sie müssen einen Multithread- Zufallszahlengenerator verwenden .

Wolf Boa Fuchs Tragen Adler Pferd Reh Kaninchen Maus Ziege Schaf Eber Büffel Ente Raupe Pflanzen
Wolf - 0 0 0 0 10 15 60 80 60 70 15 10 40 0 0
Boa 0 - 15 0 0 0 0 20 40 0 0 0 0 10 0 0
Fuchs 0 0 - 0 0 0 0 70 90 0 0 0 0 60 40 0
Tragen 0 80 0 - 0 40 80 80 90 70 70 50 20 10 0 0
Adler 0 0 10 0 - 0 0 90 90 0 0 0 0 80 0 0
Pferd 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 100
Reh 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 100
Kaninchen 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 100
Maus 0 0 0 0 0 0 0 0 - 0 0 0 0 0 90 100
Ziege 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 100
Schaf 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 100
Eber 0 0 0 0 0 0 0 0 50 0 0 - 0 0 90 100
Büffel 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 100
Ente 0 0 0 0 0 0 0 0 0 0 0 0 0 - 90 100
Raupe 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 100

Tiermerkmale:

Gewicht pro Tier, kg Maximale Anzahl Tiere dieser Art pro Standort Maximale Geschwindigkeit (Anzahl der Standorte) pro Umdrehung Anzahl der Kilogramm Futter, die erforderlich sind, um das Tier vollständig zu ernähren
Wolf 50 30 3 8
Boa 15 30 1 3
Fuchs 8 30 2 2
Tragen 500 5 2 80
Adler 6 20 3 1
Pferd 400 20 4 60
Reh 300 20 4 50
Kaninchen 2 150 2 0,45
Maus 0,05 500 1 0,01
Ziege 60 140 3 10
Schaf 70 140 3 15
Eber 400 50 2 50
Büffel 700 10 3 100
Ente 1 200 4 0,15
Raupe 0,01 1000 0 0
Pflanzen 1 200 N / A N / A

2. Ein Tier muss über Methoden zum Fressen , zur Fortpflanzung und zur Wahl einer Bewegungsrichtung verfügen .

3. Sie können die Eat- Methode in den Pflanzenfresser- und Fleischfresserklassen implementieren. Aber Vorsicht, die pflanzenfressende Ente frisst Raupen .

4. In bestimmten Klassen, die bestimmte Arten repräsentieren, können Sie alle Methoden ändern, um sie an die Eigenschaften des Tieres anzupassen.

5. Sie müssen mindestens 10 Pflanzenfresserarten und 5 Fleischfresserarten erstellen (beschrieben in Punkt 1).

Multithreading

Natürlich ist es möglich, das gesamte Programm nur mithilfe von Schleifen in einem Thread zu schreiben. Aber wir brauchen Übung im Umgang mit Multithreading, daher müssen Sie Threads und Thread-Pools verwenden. Ein geplanter Pool zum Ausführen wiederkehrender Aufgaben für Pflanzenwachstum und Tieraktionen sowie eine Aufgabe zum Anzeigen von Systemstatistiken. Alternativ können Sie die Statistiken auch in einer Aufgabe mit den Pflanzen oder Tieren anzeigen. Innerhalb der Tieraktionsaufgabe können Sie einen anderen Thread-Pool verwenden – einen gewöhnlichen. Sie entscheiden, welche Aufgaben Sie diesem Pool zuweisen.

Pflichtbestandteile der Aufgabe:

  • Tierhierarchie (OOP)
  • Tierverhalten
  • Multithreading
  • Statistiken zum Zustand der Insel bei jeder Iteration (auf der Konsole angezeigt)

Optionale Teile der Aufgabe:

  • Zeigen Sie die Parameter an einem Ort an, damit Sie die Simulation einfach verwalten können
  • Grafik statt Konsolenstatistiken. Sie können entweder Pseudografiken in der Konsole oder JavaFX, Swing... verwenden.
  • Fügen Sie weitere Faktoren hinzu, die die Simulation beeinflussen könnten:
    • mehr Tierarten
    • verschiedene Arten von Pflanzen
    • individuelles Verhalten für eine Gruppe von Tieren (z. B. Wölfe jagen und bewegen sich als Rudel und nicht einzeln)
    • Bodengelände, einschließlich eines Flusses, der die Bewegung bestimmter Tiere behindert

Über Einstellungen (falls Sie sich entscheiden, diese hinzuzufügen)

Um es bequem zu machen, die verschiedenen Einstellungen beim Starten des Programms zu ändern (die Inselgröße, die maximal zulässige Anzahl von Pflanzen/Tieren an einem Standort, die Wahrscheinlichkeit, dass sich eine bestimmte Tierart bewegt, die Anzahl der Nachkommen verschiedener Arten usw .), müssen Sie alle diese Einstellungen irgendwo ablegen, beispielsweise in einer separaten Klasse. Es sollte möglich sein, die folgenden Einstellungen zu ändern:

  • Inselgröße
  • Dauer eines Taktzyklus in der Simulation
  • die Anzahl der Tiere jeder Art zu Beginn der Simulation
  • Bedingung für den Stopp der Simulation (z. B. alle Tiere sind gestorben)
  • Anzahl der Nachkommen für jede Tierart

Unicode (wenn Sie sich für Pseudografiken entscheiden)

Sie können Unicode-Zeichen verwenden, um die Tiere darzustellen: 🐃, 🐻, 🐎, 🦌, 🐗, 🐑, 🐐, 🐺, 🐍, 🦊, 🦅, 🐇, 🦆, 🐁, 🐛.