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:
Optionale Teile der Aufgabe:
|
Ü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: 🐃, 🐻, 🐎, 🦌, 🐗, 🐑, 🐐, 🐺, 🐍, 🦊, 🦅, 🐇, 🦆, 🐁, 🐛.
GO TO FULL VERSION