Il tuo compito è programmare un modello di un'isola parametrizzata costituita da un array di posizioni (ad esempio, una matrice 100x20). I luoghi saranno popolati di piante e animali. Gli animali possono:

  • mangiare piante e/o altri animali (se la loro posizione ha cibo adatto),
  • trasferirsi (in luoghi vicini),
  • razza (se due di un genere esistono in un luogo),
  • morire di fame o essere mangiati.

OOP

Quando crei il tuo host di animali, dovresti usare OOP il più possibile: tutte le specie deriveranno da una classe animale astratta, che conterrà il comportamento comune a tutti gli animali. Se animali specifici hanno caratteristiche specifiche per quanto riguarda l'alimentazione, la riproduzione, il movimento, ecc., devono ignorare i metodi della classe Animal.

Ecco cosa devi fare:

1. Crea una gerarchia di classi:

  • Carnivori : Lupo , Boa , Volpe , Orso , Aquila

  • Erbivori : cavallo , cervo , coniglio , topo , capra , pecora , cinghiale , bufalo , anatra , bruco

  • Impianti

La tabella seguente mostra la probabilità che un animale mangi "cibo" se si trova nella stessa posizione di quel "cibo". Diamo un'occhiata alla situazione in cui "un lupo mangia un coniglio". Il numero nella tabella è 60. Ciò significa che se un lupo e un coniglio si trovano nella stessa posizione, c'è una probabilità del 60% che il lupo mangi il coniglio. È necessario utilizzare un generatore di numeri casuali multithread .

Lupo Boa Volpe Orso Aquila Cavallo Cervo Coniglio Topo Capra Pecora Cinghiale Bufalo Anatra bruco Impianti
Lupo - 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
Volpe 0 0 - 0 0 0 0 70 90 0 0 0 0 60 40 0
Orso 0 80 0 - 0 40 80 80 90 70 70 50 20 10 0 0
Aquila 0 0 10 0 - 0 0 90 90 0 0 0 0 80 0 0
Cavallo 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 100
Cervo 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 100
Coniglio 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 100
Topo 0 0 0 0 0 0 0 0 - 0 0 0 0 0 90 100
Capra 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 100
Pecora 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 100
Cinghiale 0 0 0 0 0 0 0 0 50 0 0 - 0 0 90 100
Bufalo 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 100
Anatra 0 0 0 0 0 0 0 0 0 0 0 0 0 - 90 100
bruco 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 100

Caratteristiche animali:

Peso per animale, kg Numero massimo di animali di questa specie per località Velocità massima (numero di posizioni) per turno Numero di chilogrammi di cibo necessari per nutrire completamente l'animale
Lupo 50 30 3 8
Boa 15 30 1 3
Volpe 8 30 2 2
Orso 500 5 2 80
Aquila 6 20 3 1
Cavallo 400 20 4 60
Cervo 300 20 4 50
Coniglio 2 150 2 0,45
Topo 0,05 500 1 0.01
Capra 60 140 3 10
Pecora 70 140 3 15
Cinghiale 400 50 2 50
Bufalo 700 10 3 100
Anatra 1 200 4 0,15
bruco 0.01 1000 0 0
Impianti 1 200 N / A N / A

2. Un animale deve avere metodi per mangiare , riprodursi e scegliere una direzione per il movimento .

3. È possibile implementare il metodo eat nelle classi erbivori e carnivori. Ma attenzione, l' anatra erbivora mangia i bruchi .

4. In classi specifiche che rappresentano specie particolari, è possibile modificare tutti i metodi per adattarli alle caratteristiche dell'animale.

5. Devi creare almeno 10 specie erbivore e 5 specie carnivore (descritte al punto 1).

Multithreading

Ovviamente è possibile scrivere l'intero programma su un thread usando solo i loop. Ma abbiamo bisogno di fare pratica lavorando con il multithreading, quindi è necessario utilizzare thread e pool di thread. Un pool pianificato per eseguire attività ricorrenti per la crescita delle piante e le azioni degli animali e un'attività per visualizzare le statistiche di sistema. In alternativa, puoi visualizzare le statistiche in un'attività con le piante o gli animali. All'interno dell'attività di azione animale, puoi utilizzare un altro pool di thread, uno normale. Sei tu a decidere quali attività assegnare a questo pool.

Parti obbligatorie del compito:

  • Gerarchia animale (OOP)
  • Comportamento animale
  • Multithreading
  • Statistiche sullo stato dell'isola ad ogni iterazione (visualizzate sulla console)

Parti facoltative dell'attività:

  • Visualizza i parametri in un unico posto in modo che sia facile gestire la simulazione
  • Grafica invece delle statistiche della console. Puoi usare la pseudografica nella console o JavaFX, Swing...
  • Aggiungi altri fattori che potrebbero influenzare la simulazione:
    • più tipi di animali
    • diversi tipi di piante
    • comportamento personalizzato per un gruppo di animali (ad esempio, i lupi cacciano e si muovono in branco piuttosto che separatamente)
    • terreno terrestre, compreso un fiume che impedisce il movimento di alcuni animali

Informazioni sulle impostazioni (se decidi di aggiungerle)

Per facilitare la modifica delle varie impostazioni all'avvio del programma (la dimensione dell'isola, il numero massimo consentito di piante/animali in un luogo, la probabilità che un particolare tipo di animale si sposti, il numero di discendenti in diverse specie, ecc. .), devi inserire tutte queste impostazioni da qualche parte, ad esempio, in una classe separata. Dovrebbe essere possibile modificare le seguenti impostazioni:

  • dimensione dell'isola
  • durata di un ciclo di clock nella simulazione
  • il numero di animali di ciascuna specie all'inizio della simulazione
  • condizione per fermare la simulazione (es. tutti gli animali sono morti)
  • numero di figli per ogni tipo di animale

Unicode (se decidi di fare pseudografica)

Puoi utilizzare i caratteri Unicode per rappresentare gli animali: 🐃, 🐻, 🐎, 🦌, 🐗, 🐑, 🐐, 🐺, 🐍, 🦊, 🦅, 🐇, 🦆, 🐁, 🐛.