Su tarea es programar un modelo de una isla parametrizada que consta de una matriz de ubicaciones (por ejemplo, una matriz de 100x20). Los lugares estarán poblados de plantas y animales. Los animales pueden:

  • comer plantas y/u otros animales (si su ubicación tiene comida adecuada),
  • mover (a lugares vecinos),
  • raza (si existen dos del mismo tipo en un lugar),
  • morir de hambre o ser comido.

Programación orientada a objetos

Al crear su hueste de animales, debe usar OOP tanto como sea posible: todas las especies se derivarán de una clase Animal abstracta, que contendrá el comportamiento que es común a todos los animales. Si animales específicos tienen características específicas con respecto a su alimentación, reproducción, movimiento, etc., entonces deben anular los métodos de la clase Animal.

Esto es lo que debe hacer:

1. Cree una jerarquía de clases:

  • Carnívoros : lobo , boa , zorro , oso , águila

  • Herbívoros : caballo , ciervo , conejo , ratón , cabra , oveja , jabalí , búfalo , pato , oruga

  • Plantas

La siguiente tabla muestra la probabilidad de que un animal coma "comida" si está en el mismo lugar que esa "comida". Veamos la situación en la que "un lobo se come un conejo". El número de la tabla es 60. Esto significa que si un lobo y un conejo están en el mismo lugar, hay un 60 % de posibilidades de que el lobo se coma al conejo. Necesita utilizar un generador de números aleatorios multiproceso .

Lobo Boa Zorro Oso Águila Caballo Ciervo Conejo Ratón Cabra Oveja Jabali Búfalo Pato Oruga 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
Zorro 0 0 - 0 0 0 0 70 90 0 0 0 0 60 40 0
Oso 0 80 0 - 0 40 80 80 90 70 70 50 20 10 0 0
Águila 0 0 10 0 - 0 0 90 90 0 0 0 0 80 0 0
Caballo 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 100
Ciervo 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 100
Conejo 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 100
Ratón 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
Oveja 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 100
Jabali 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
Oruga 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 100

Características de los animales:

Peso por animal, kg Número máximo de animales de esta especie por localidad Velocidad máxima (número de ubicación) por turno Número de kilogramos de alimento necesarios para alimentar completamente al animal
Lobo 50 30 3 8
Boa 15 30 1 3
Zorro 8 30 2 2
Oso 500 5 2 80
Águila 6 20 3 1
Caballo 400 20 4 60
Ciervo 300 20 4 50
Conejo 2 150 2 0,45
Ratón 0.05 500 1 0.01
Cabra 60 140 3 10
Oveja 70 140 3 15
Jabali 400 50 2 50
Búfalo 700 10 3 100
Pato 1 200 4 0.15
Oruga 0.01 1000 0 0
Plantas 1 200 N / A N / A

2. Un animal debe tener métodos para comer , reproducirse y elegir una dirección de movimiento .

3. Puede implementar el método eat en las clases de herbívoros y carnívoros. Pero cuidado, el pato herbívoro come orugas .

4. En clases específicas que representan especies particulares, puede modificar todos los métodos para adaptarlos a las características del animal.

5. Debe crear al menos 10 especies de herbívoros y 5 especies de carnívoros (descritos en el punto 1).

subprocesos múltiples

Por supuesto, es posible escribir todo el programa en un hilo usando solo bucles. Pero necesitamos práctica trabajando con subprocesos múltiples, por lo que debe usar subprocesos y grupos de subprocesos. Un grupo programado para ejecutar tareas recurrentes para el crecimiento de plantas y acciones de animales, y una tarea para mostrar estadísticas del sistema. Alternativamente, puede mostrar las estadísticas en una tarea con las plantas o los animales. Dentro de la tarea de acción animal, puede usar otro grupo de subprocesos, uno ordinario. Usted decide qué tareas asignar a este grupo.

Partes obligatorias de la tarea:

  • Jerarquía de animales (OOP)
  • Conducta animal
  • subprocesos múltiples
  • Estadísticas sobre el estado de la isla en cada iteración (se muestran en la consola)

Partes opcionales de la tarea:

  • Muestre los parámetros en un solo lugar para que sea fácil administrar la simulación
  • Gráficos en lugar de estadísticas de consola. Puede usar pseudográficos en la consola, o JavaFX, Swing...
  • Agregue otros factores que podrían afectar la simulación:
    • más tipos de animales
    • diferentes tipos de plantas
    • comportamiento personalizado para un grupo de animales (por ejemplo, los lobos cazan y se mueven como manada en lugar de hacerlo por separado)
    • Terreno terrestre, incluido un río que impide el movimiento de ciertos animales.

Acerca de la configuración (si decides agregarla)

Para que sea conveniente cambiar las diversas configuraciones al iniciar el programa (el tamaño de la isla, el número máximo permitido de plantas/animales en un lugar, la probabilidad de que un tipo particular de animal se mueva, el número de crías en diferentes especies, etc.) .), debe colocar todas estas configuraciones en algún lugar, por ejemplo, en una clase separada. Debería ser posible cambiar los siguientes ajustes:

  • tamaño de la isla
  • duración de un ciclo de reloj en la simulación
  • el número de animales de cada especie al inicio de la simulación
  • condición para detener la simulación (por ejemplo, todos los animales han muerto)
  • número de crías por cada tipo de animal

Unicode (si decides hacer pseudográficos)

Puede usar caracteres Unicode para representar a los animales: 🐃, 🐻, 🐎, 🦌, 🐗, 🐑, 🐐, 🐺, 🐍, 🦊, 🦅, 🐇, 🦆, 🐁, 🐛.