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:
Partes opcionales de la tarea:
|
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: 🐃, 🐻, 🐎, 🦌, 🐗, 🐑, 🐐, 🐺, 🐍, 🦊, 🦅, 🐇, 🦆, 🐁, 🐛.
GO TO FULL VERSION