Scenariusz na lab 5: Na tym labie bÄdziemy implementowaÄ prosty system symulujÄ cy rolnika gospodarujÄ cego swoim ogrodem warzywnym w czasie rzeczywistym. Rolnik ma do dyspozycji ogrĂłd, ktĂłry ma k miejsc na warzywa (parametr konstruktora). W kaĹźdym z tych miejsc rolnik moĹźe posadziÄ warzywo. IstniejÄ róşne rodzaje warzyw: pomidory, ogĂłrki, ziemniaki, rzodkiewki, itp. Posadzenie kaĹźdego warzywo kosztuje pewnÄ kwotÄ pieniÄdzy (zaleĹźnie od rodzaju warzywa), oraz kaĹźde warzywo ma swojÄ funkcjÄ wartoĹci w zaleĹźnoĹci od czasu posadzenia. PrzykĹadowo dla ziemniaka moĹźe byÄ to funkcja skokowa --- ziemniak dojrzewa 10 sekund podczas ktĂłrych wart jest 0, a potem jest wart 5 PLN. Z kolei pomidor jest na poczÄ tku wart 0 przez 10 sekund, potem jego cena roĹnie liniowo do 10 PLN przez 5 sekund, a potem przez 5 sekund maleje liniowo do 0 (kiedy to pomidor gnije i jest juĹź wart 0). Warzywo powinno mieÄ metodÄ pozwalajÄ cÄ oceniÄ jego obecnÄ wartoĹÄ, zaĹ rolnik moĹźe siÄ pytaÄ o obecne wartoĹci warzyw poprzez ogrĂłd. W kaĹźdym momencie rolnik moĹźe zebraÄ warzywo z danego miejsca w ogrodzie. Wtedy to wartoĹÄ warzywa ustala siÄ na obecnÄ ocenÄ jego wartoĹci, zaĹ miejsce zajmowane przez warzywo opróşnia siÄ tak, Ĺźe moĹźna tam posadziÄ coĹ nowego. ZauwaĹź, Ĺźe rolnik nie zna konkretnie funkcji oceny danego warzywa, a jedynie moĹźe pytaÄ konkretne instancje o obecnÄ wartoĹÄ. Docelowo chcielibyĹmy napisaÄ metodÄ rolnika simulate(Garden g, int time), ktĂłra w (poczÄ tkowo pustym) ogrodzie symuluje jeden sezon sadowniczy trwajÄ cy time sekund. Podczas tego czasu rolnik ma sadziÄ i zbieraÄ warzywa z ogrodu wedĹug wybranej przez siebie strategii. Rolnik powinien na bieĹźÄ co informowaÄ o swoich dziaĹaniach (przykĹadowo, wypisywanie na ekran "ZebraĹem ziemniaka! WartoĹÄ: 5 PLN"), a na koniec wypisaÄ raport z sezonu: listÄ zebranych warzyw oraz sumaryczne kwoty przychodĂłw (z zebranych warzyw) i kosztĂłw (na sadzenie roĹlin). Zaimplementuj róşne strategie rolnika, przykĹadowo: - PracownikPGR: regularnie co dziesiÄÄ sekund zbiera wszystko z ogrody nie zwaĹźajÄ c na obecne wartoĹci i sadzi wszÄdzie losowo wybrane warzywo. - Gospodarz: co sekundÄ przeglÄ da stan wszystkich posadzonych warzyw, i jeĹli wartoĹÄ warzywa zmalaĹa od ostatniego sprawdzenia, to zbiera to warzywo i sadzi nowe, losowo wybrane. Zaimplementuj ten system tak, by mĂłc w metodzie main w rolniku przetestowaÄ kilka róşnych przebiegĂłw metody simulate dla róşnych ogrodĂłw i róşnych strategii rolnika. Zacznij oczywiĹcie od zaprojektowania hierarchii klas dla tego systemu. Zaimplementuj tak ze 3 przykĹadowe warzywa spoĹrĂłd ktĂłrych rolnik moĹźe wybieraÄ. Wszelkie nieĹcisĹoĹci w powyĹźszym opisie interpretuj wedĹug swojego uznania. Przydatne rzeczy, ktĂłrych powinieneĹ siÄ samodzielnie nauczyÄ z internetĂłw do wykonania tego zadania: - generowanie liczb losowych: klasa Random - sprawdzanie obecnego czasu systemowego : System.currentTimeMillis() - czekanie odpowiedniÄ liczbÄ milisekund : Thread.sleep() - rozszerzalna lista (do zebranych warzyw) : klasa ArrayList<E>