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:
Parti facoltative dell'attività:
|
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: 🐃, 🐻, 🐎, 🦌, 🐗, 🐑, 🐐, 🐺, 🐍, 🦊, 🦅, 🐇, 🦆, 🐁, 🐛.
GO TO FULL VERSION