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:

  • Hierarquia animal (OOP)
  • Comportamento animal
  • Multithreading
  • Estatísticas sobre o estado da ilha em cada iteração (exibidas no console)

Partes opcionais da tarefa:

  • Exiba os parâmetros em um só lugar para facilitar o gerenciamento da simulação
  • Gráficos em vez de estatísticas do console. Você pode usar pseudográficos no console ou JavaFX, Swing...
  • Adicione outros fatores que podem afetar a simulação:
    • mais tipos de animais
    • diferentes tipos de plantas
    • comportamento personalizado para um grupo de animais (por exemplo, lobos caçam e se movem como um bando em vez de separadamente)
    • terreno terrestre, incluindo um rio que impede o movimento de certos animais

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: 🐃, 🐻, 🐎, 🦌, 🐗, 🐑, 🐐, 🐺, 🐍, 🦊, 🦅, 🐇, 🦆, 🐁, 🐛.