Ang iyong gawain ay mag-program ng isang modelo ng isang parameterized na isla na binubuo ng isang hanay ng mga lokasyon (halimbawa, isang 100x20 matrix). Ang mga lokasyon ay mapupuno ng mga halaman at hayop. Ang mga hayop ay maaaring:

  • kumain ng mga halaman at/o iba pang mga hayop (kung ang kanilang lokasyon ay may angkop na pagkain),
  • lumipat (sa mga kalapit na lokasyon),
  • lahi (kung may dalawa sa isang uri sa isang lokasyon),
  • mamatay sa gutom o kakainin.

OOP

Kapag gumagawa ng iyong host ng mga hayop, dapat mong gamitin ang OOP hangga't maaari: ang lahat ng mga species ay magmumula sa isang abstract na klase ng Animal, na maglalaman ng pag-uugali na karaniwan sa lahat ng mga hayop. Kung ang mga partikular na hayop ay may mga partikular na tampok tungkol sa kanilang pagpapakain, pagpaparami, paggalaw, atbp., pagkatapos ay kailangan nilang i-override ang mga pamamaraan ng klase ng Hayop.

Narito ang kailangan mong gawin:

1. Lumikha ng hierarchy ng klase:

  • Mga Carnivore : Lobo , Boa , Fox , Oso , Agila

  • Mga Herbivore :Kabayo , Usa , Kuneho , Daga , Kambing , Tupa, Bulugan , Kalabaw , Itik , Uod

  • Mga halaman

Ipinapakita ng talahanayan sa ibaba kung gaano kalamang na makakain ng "pagkain" ang isang hayop kung ito ay nasa parehong lokasyon ng "pagkain" na iyon. Tingnan natin ang sitwasyon kung saan "ang lobo ay kumakain ng kuneho". Ang numero sa talahanayan ay 60. Nangangahulugan ito na kung ang isang lobo at kuneho ay nasa parehong lokasyon, mayroong 60% na posibilidad na kainin ng lobo ang kuneho. Kailangan mong gumamit ng multithreaded random number generator .

Lobo Boa Fox Oso Agila Kabayo usa Kuneho Daga kambing tupa baboy-ramo kalabaw Itik Uod Mga halaman
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
Fox 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
Agila 0 0 10 0 - 0 0 90 90 0 0 0 0 80 0 0
Kabayo 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 100
usa 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 100
Kuneho 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 100
Daga 0 0 0 0 0 0 0 0 - 0 0 0 0 0 90 100
kambing 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 100
tupa 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 100
baboy-ramo 0 0 0 0 0 0 0 0 50 0 0 - 0 0 90 100
kalabaw 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 100
Itik 0 0 0 0 0 0 0 0 0 0 0 0 0 - 90 100
Uod 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 100

Mga katangian ng hayop:

Timbang bawat hayop, kg Pinakamataas na bilang ng mga hayop ng species na ito sa bawat lokasyon Pinakamataas na bilis (bilang ng lokasyon) bawat pagliko Bilang ng mga kilo ng pagkain na kinakailangan upang ganap na mapakain ang hayop
Lobo 50 30 3 8
Boa 15 30 1 3
Fox 8 30 2 2
Oso 500 5 2 80
Agila 6 20 3 1
Kabayo 400 20 4 60
usa 300 20 4 50
Kuneho 2 150 2 0.45
Daga 0.05 500 1 0.01
kambing 60 140 3 10
tupa 70 140 3 15
baboy-ramo 400 50 2 50
kalabaw 700 10 3 100
Itik 1 200 4 0.15
Uod 0.01 1000 0 0
Mga halaman 1 200 N/A N/A

2. Ang isang hayop ay dapat may mga pamamaraan sa pagkain , pagpaparami , at pagpili ng direksyon para sa paggalaw .

3. Maaari mong ipatupad ang paraan ng pagkain sa mga klase ng herbivore at carnivore. Ngunit mag-ingat, ang herbivore duck ay kumakain ng mga uod .

4. Sa mga partikular na klase na kumakatawan sa partikular na species, maaari mong baguhin ang lahat ng mga pamamaraan upang umangkop sa mga katangian ng hayop.

5. Kailangan mong lumikha ng hindi bababa sa 10 herbivore species at 5 carnivore species (inilalarawan sa Item 1).

Multithreading

Siyempre, posible na isulat ang buong programa sa isang thread gamit lamang ang mga loop. Ngunit kailangan namin ng pagsasanay sa pagtatrabaho sa multithreading, kaya dapat kang gumamit ng mga thread at thread pool. Isang naka-iskedyul na pool na magpapatakbo ng mga umuulit na gawain para sa paglaki ng halaman at mga pagkilos ng hayop, at isang gawain upang ipakita ang mga istatistika ng system. Bilang kahalili, maaari mong ipakita ang mga istatistika sa isang gawain kasama ang mga halaman o hayop. Sa loob ng gawaing pagkilos ng hayop, maaari kang gumamit ng isa pang thread pool - isang ordinaryong. Ikaw ang magpapasya kung aling mga gawain ang itatalaga sa pool na ito.

Mga kinakailangang bahagi ng gawain:

  • Animal hierarchy (OOP)
  • Pag-uugali ng hayop
  • Multithreading
  • Mga istatistika sa estado ng isla sa bawat pag-ulit (ipinapakita sa console)

Mga opsyonal na bahagi ng gawain:

  • Ipakita ang mga parameter sa isang lugar upang madaling pamahalaan ang simulation
  • Mga graphic sa halip na mga istatistika ng console. Maaari mong gamitin ang alinman sa pseudographics sa console, o JavaFX, Swing...
  • Magdagdag ng iba pang mga salik na maaaring makaapekto sa simulation:
    • mas maraming uri ng hayop
    • iba't ibang uri ng halaman
    • custom na gawi para sa isang pangkat ng mga hayop (halimbawa, ang mga lobo ay nangangaso at gumagalaw bilang isang pack sa halip na hiwalay)
    • lupain, kabilang ang isang ilog na humahadlang sa paggalaw ng ilang mga hayop

Tungkol sa mga setting (kung magpasya kang idagdag ang mga ito)

Upang gawing maginhawang baguhin ang iba't ibang mga setting kapag sinimulan ang programa (ang laki ng isla, ang maximum na pinapayagang bilang ng mga halaman / hayop sa isang lokasyon, ang posibilidad na ang isang partikular na uri ng hayop ay lumipat, ang bilang ng mga supling sa iba't ibang uri ng hayop, atbp. .), kailangan mong ilagay ang lahat ng mga setting na ito sa isang lugar, halimbawa, sa isang hiwalay na klase. Posibleng baguhin ang mga sumusunod na setting:

  • laki ng isla
  • tagal ng isang ikot ng orasan sa simulation
  • ang bilang ng mga hayop ng bawat species sa simula ng simulation
  • kundisyon para ihinto ang simulation (hal. lahat ng hayop ay namatay)
  • bilang ng mga supling para sa bawat uri ng hayop

Unicode (kung nagpasya kang gumawa ng pseudographics)

Maaari mong gamitin ang mga character na Unicode upang ilarawan ang mga hayop: 🐃, 🐻, 🐎, 🦌, 🐗, 🐑, 🐐, 🐺, 🐍, 🦊, 🦅, 🐇, 🦆, 🐛