Sua tarefa é programar um modelo de uma ilha parametrizada que consiste em uma matriz de locais (por exemplo, uma matriz de 100x20). Os locais serão preenchidos com plantas e animais. Os animais podem:
- comer plantas e/ou outros animais (se a sua localização tiver comida adequada),
- mover (para locais vizinhos),
- raça (se existirem dois de um tipo em um local),
- morrer de fome ou ser comido.
OOP
Ao criar seu host de animais, você deve usar OOP o máximo possível: todas as espécies derivarão de uma classe abstrata Animal, que conterá o comportamento comum a todos os animais. Se animais específicos tiverem características específicas em relação à sua alimentação, reprodução, movimento, etc., eles precisam sobrescrever os métodos da classe Animal.
Aqui está o que você precisa fazer:
1. Crie uma hierarquia de classes:
-
Carnívoros : Lobo , Boa , Raposa , Urso , Águia
-
Herbívoros : cavalo , veado , coelho , rato , cabra , ovelha , javali , búfalo , pato , lagarta
-
plantas
A tabela abaixo mostra a probabilidade de um animal comer "comida" se estiver no mesmo local que essa "comida". Vejamos a situação em que "um lobo come um coelho". O número na tabela é 60. Isso significa que, se um lobo e um coelho estiverem no mesmo local, há 60% de chance de que o lobo coma o coelho. Você precisa usar um gerador de números aleatórios multithread .
Lobo | Boa | Raposa | Urso | Águia | Cavalo | Cervo | Coelho | Rato | Cabra | Ovelha | Javali | Búfalo | Pato | Lagarta | plantas | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Lobo | - | 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 |
Raposa | 0 | 0 | - | 0 | 0 | 0 | 0 | 70 | 90 | 0 | 0 | 0 | 0 | 60 | 40 | 0 |
Urso | 0 | 80 | 0 | - | 0 | 40 | 80 | 80 | 90 | 70 | 70 | 50 | 20 | 10 | 0 | 0 |
Águia | 0 | 0 | 10 | 0 | - | 0 | 0 | 90 | 90 | 0 | 0 | 0 | 0 | 80 | 0 | 0 |
Cavalo | 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 |
Coelho | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 100 |
Rato | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | 0 | 0 | 0 | 0 | 0 | 90 | 100 |
Cabra | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | 0 | 0 | 0 | 0 | 0 | 100 |
Ovelha | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | 0 | 0 | 0 | 0 | 100 |
Javali | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 50 | 0 | 0 | - | 0 | 0 | 90 | 100 |
Búfalo | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | 0 | 0 | 100 |
Pato | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | 90 | 100 |
Lagarta | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | 100 |
Características dos animais:
Peso por animal, kg | Número máximo de animais desta espécie por localidade | Velocidade máxima (número de localização) por turno | Número de quilogramas de alimento necessários para alimentar totalmente o animal | |
---|---|---|---|---|
Lobo | 50 | 30 | 3 | 8 |
Boa | 15 | 30 | 1 | 3 |
Raposa | 8 | 30 | 2 | 2 |
Urso | 500 | 5 | 2 | 80 |
Águia | 6 | 20 | 3 | 1 |
Cavalo | 400 | 20 | 4 | 60 |
Cervo | 300 | 20 | 4 | 50 |
Coelho | 2 | 150 | 2 | 0,45 |
Rato | 0,05 | 500 | 1 | 0,01 |
Cabra | 60 | 140 | 3 | 10 |
Ovelha | 70 | 140 | 3 | 15 |
Javali | 400 | 50 | 2 | 50 |
Búfalo | 700 | 10 | 3 | 100 |
Pato | 1 | 200 | 4 | 0,15 |
Lagarta | 0,01 | 1000 | 0 | 0 |
plantas | 1 | 200 | N / D | N / D |
2. Um animal deve ter métodos para comer , procriar e escolher a direção do movimento .
3. Você pode implementar o método eat nas classes herbivore e carnivore. Mas cuidado, o pato herbívoro come lagartas .
4. Em classes específicas que representam espécies particulares, você pode modificar todos os métodos para atender às características do animal.
5. Você precisa criar pelo menos 10 espécies de herbívoros e 5 espécies de carnívoros (descrito no item 1).
Multithreading
Claro, é possível escrever o programa inteiro em um thread usando apenas loops. Mas precisamos praticar trabalhando com multithreading, então você deve usar threads e pools de threads. Um pool agendado para executar tarefas recorrentes para crescimento de plantas e ações de animais e uma tarefa para exibir estatísticas do sistema. Alternativamente, você pode exibir as estatísticas em uma tarefa com plantas ou animais. Dentro da tarefa de ação animal, você pode usar outro pool de threads — um comum. Você decide quais tarefas atribuir a este pool.
Partes obrigatórias da tarefa:
Partes opcionais da tarefa:
|
Sobre as configurações (se você decidir adicioná-las)
Para facilitar a alteração das várias configurações ao iniciar o programa (o tamanho da ilha, o número máximo permitido de plantas / animais em um local, a probabilidade de um determinado tipo de animal se mover, o número de descendentes em diferentes espécies, etc. .), você precisa colocar todas essas configurações em algum lugar, por exemplo, em uma classe separada. Deve ser possível alterar as seguintes configurações:
- tamanho da ilha
- duração de um ciclo de clock na simulação
- o número de animais de cada espécie no início da simulação
- condição para parar a simulação (por exemplo, todos os animais morreram)
- número de descendentes para cada tipo de animal
Unicode (se você decidir fazer pseudográficos)
Você pode usar caracteres Unicode para representar os animais: 🐃, 🐻, 🐎, 🦌, 🐗, 🐑, 🐐, 🐺, 🐍, 🦊, 🦅, 🐇, 🦆, 🐁, 🐛.
GO TO FULL VERSION