Votre tâche consiste à programmer un modèle d'îlot paramétré composé d'un tableau d'emplacements (par exemple, une matrice 100x20). Les emplacements seront peuplés de plantes et d'animaux. Les animaux peuvent :

  • manger des plantes et/ou d'autres animaux (si leur emplacement dispose d'une alimentation adaptée),
  • déménager (dans des localités voisines),
  • race (si deux semblables existent dans un lieu),
  • mourir de faim ou être mangé.

POO

Lors de la création de votre hôte d'animaux, vous devez utiliser la POO autant que possible : toutes les espèces dériveront d'une classe animale abstraite, qui contiendra le comportement commun à tous les animaux. Si des animaux spécifiques ont des caractéristiques spécifiques en ce qui concerne leur alimentation, leur reproduction, leurs déplacements, etc., ils doivent remplacer les méthodes de la classe Animal.

Voici ce que vous devez faire :

1. Créez une hiérarchie de classes :

  • Carnivores : Loup , Boa , Renard , Ours , Aigle

  • Herbivores : Cheval , Cerf , Lapin , Souris , Chèvre , Mouton , Sanglier , Buffle , Canard , Chenille

  • Végétaux

Le tableau ci-dessous montre la probabilité qu'un animal mange de la "nourriture" s'il se trouve au même endroit que cette "nourriture". Regardons la situation où "un loup mange un lapin". Le nombre dans le tableau est 60. Cela signifie que si un loup et un lapin se trouvent au même endroit, il y a 60 % de chances que le loup mange le lapin. Vous devez utiliser un générateur de nombres aléatoires multithread .

Loup Boa Renard Ours Aigle Cheval Cerf Lapin Souris Chèvre Mouton Sanglier Buffle Canard chenille Végétaux
Loup - 0 0 0 0 dix 15 60 80 60 70 15 dix 40 0 0
Boa 0 - 15 0 0 0 0 20 40 0 0 0 0 dix 0 0
Renard 0 0 - 0 0 0 0 70 90 0 0 0 0 60 40 0
Ours 0 80 0 - 0 40 80 80 90 70 70 50 20 dix 0 0
Aigle 0 0 dix 0 - 0 0 90 90 0 0 0 0 80 0 0
Cheval 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 100
Cerf 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 100
Lapin 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 100
Souris 0 0 0 0 0 0 0 0 - 0 0 0 0 0 90 100
Chèvre 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 100
Mouton 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 100
Sanglier 0 0 0 0 0 0 0 0 50 0 0 - 0 0 90 100
Buffle 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 100
Canard 0 0 0 0 0 0 0 0 0 0 0 0 0 - 90 100
chenille 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 100

Caractéristiques animales :

Poids par animal, kg Nombre maximum d'animaux de cette espèce par emplacement Vitesse maximale (nombre d'emplacements) par tour Nombre de kilogrammes de nourriture nécessaires pour nourrir complètement l'animal
Loup 50 30 3 8
Boa 15 30 1 3
Renard 8 30 2 2
Ours 500 5 2 80
Aigle 6 20 3 1
Cheval 400 20 4 60
Cerf 300 20 4 50
Lapin 2 150 2 0,45
Souris 0,05 500 1 0,01
Chèvre 60 140 3 dix
Mouton 70 140 3 15
Sanglier 400 50 2 50
Buffle 700 dix 3 100
Canard 1 200 4 0,15
chenille 0,01 1000 0 0
Végétaux 1 200 N / A N / A

2. Un animal doit avoir des méthodes pour manger , se reproduire et choisir une direction de mouvement .

3. Vous pouvez implémenter la méthode manger dans les classes herbivore et carnivore. Mais attention, le canard herbivore mange des chenilles .

4. Dans des classes spécifiques représentant des espèces particulières, vous pouvez modifier toutes les méthodes en fonction des caractéristiques de l'animal.

5. Vous devez créer au moins 10 espèces d'herbivores et 5 espèces de carnivores (décrites au point 1).

Multithreading

Bien sûr, il est possible d'écrire tout le programme sur un thread en utilisant uniquement des boucles. Mais nous avons besoin de pratique pour travailler avec le multithreading, vous devez donc utiliser des threads et des pools de threads. Un pool planifié pour exécuter des tâches récurrentes pour la croissance des plantes et les actions des animaux, et une tâche pour afficher les statistiques du système. Alternativement, vous pouvez afficher les statistiques dans une tâche avec les plantes ou les animaux. À l'intérieur de la tâche d'action animale, vous pouvez utiliser un autre pool de threads - un pool ordinaire. Vous décidez des tâches à affecter à ce pool.

Parties obligatoires de la tâche :

  • Hiérarchie animale (POO)
  • Comportement animal
  • Multithreading
  • Statistiques sur l'état de l'îlot à chaque itération (affichées sur la console)

Parties facultatives de la tâche :

  • Afficher les paramètres en un seul endroit pour faciliter la gestion de la simulation
  • Graphiques au lieu de statistiques de la console. Vous pouvez utiliser soit des pseudographics dans la console, soit JavaFX, Swing...
  • Ajoutez d'autres facteurs qui pourraient affecter la simulation :
    • plus d'espèces d'animaux
    • différents types de plantes
    • comportement personnalisé pour un groupe d'animaux (par exemple, les loups chassent et se déplacent en meute plutôt que séparément)
    • terrain au sol, y compris une rivière qui empêche le mouvement de certains animaux

À propos des paramètres (si vous décidez de les ajouter)

Pour faciliter la modification des différents paramètres lors du démarrage du programme (la taille de l'île, le nombre maximal autorisé de plantes / animaux à un endroit, la probabilité qu'un type particulier d'animal se déplace, le nombre de descendants dans différentes espèces, etc. .), vous devez mettre tous ces paramètres quelque part, par exemple, dans une classe séparée. Il devrait être possible de modifier les paramètres suivants :

  • taille de l'île
  • durée d'un cycle d'horloge dans la simulation
  • le nombre d'animaux de chaque espèce au début de la simulation
  • condition d'arrêt de la simulation (par exemple tous les animaux sont morts)
  • nombre de descendants pour chaque type d'animal

Unicode (si vous décidez de faire des pseudographies)

Vous pouvez utiliser des caractères Unicode pour représenter les animaux : 🐃, 🐻, 🐎, 🦌, 🐗, 🐑, 🐐, 🐺, 🐍, 🦊, 🦅, 🐇, 🦆, 🐁, 🐛.