Zadanie numer 3 laboratorium programowania obiektowego:
Laboratorium programowania obiektowego Zadanie zaliczeniowe 3 Homer Simpson pracuje w elektrowni atomowej. W zajmowanym przez niego pokoju zacięły się drzwi. Jest godzina 16. Homer musi wyjść z pracy za 10 minut, jeśli chce zdążyć do domu na transmisję meczu. Pokój ma rozmiary 20 na 20 (metrów) - składa się z 400 pól rozmiaru 1 na 1. Dla uproszczenia zakładamy, że wszystko, co się w nim znajduje, w tym także Homer, zajmuje powierzchnię 1 metr na 1 metr. Położenie przedmiotów w pokoju określać będziemy, podając jako współrzędne parę liczb 1..20. Ściany okalające pomieszczenie mają współrzędne (1,?), (20,?), (?,1), (?,20) gdzie ? reprezentuje dowolną liczbę z przedziału 1..20. Wyjątkiem od powyższej reguły jest pole o współrzędnych (1,10), na którym znajdują się (zatrzaśnięte) drzwi. Na każdym polu może się znajdować tylko jeden przedmiot. We wszystkich przypadkach, w których będziemy mówili o odległości dwu punktów, będziemy mieli na myśli odległość liczoną w tzw. metryce miejskiej, w której odległość punktów (a,b) i (c,d) jest równa abs(a-c)+abs(b-d). Oprócz ścian zewnętrznych, drzwi i Homera w polu gry znajdują się ściany wewnętrzne, skrzynie, puszki piwa, pączki oraz trzy rodzaje materiałów rozszczepialnych: Mars, Jowisz i Saturn. Homer na zawartość pomieszczenia może wpływać na dwa sposoby - przesuwając znajdujące się w nim przedmioty oraz wysadzając je. Przesuwać może dowolne przedmioty z wyjątkiem ścian, drzwi, puszek piwa i pączków. Każdy przedmiot, po przesunięciu, przenosi się na sąsiednie pole, o ile jest puste. Oprócz możliwości przesuwania przedmiotów w pomieszczeniu, Homer może powodować eksplozje. Każdy wybuch, do jakiego dojdzie, ma określoną siłę, wyrażoną liczbą całkowitą większą od zera. Przedmioty albo są całkowicie odporne na wybuchy, albo mają wytrzymałość wyrażoną liczbą całkowitą, również większą od zera. Wybuch o sile N niszczy wszystko w odległości N od wybuchającego przedmiotu (lub przedmiotów), czego wytrzymałość jest mniejsza bądź równa N. Pączki, jako jedyne, po znalezieniu się w polu wybuchu same wybuchają (z właściwą sobie siłą), a więc mogą powodować wybuchy łańcuchowo. Wytrzymałość na wybuchy przedmiotów (w tym także wytrzymałość Homera oraz materiałów rozszczepialnych) jest równa 1 za wyjątkiem ścian zewnętrznych, które są niezniszczalne oraz ścian wewnętrznych i drzwi, dla których jest równa 2. Każdy z materiałów rozszczepialnych ma pewne cechy szczególne: * Mars, gdy znajdzie się w polu wybuchu o sile większej bądź równej 1, ulega zniszczeniu, ale nie wybucha. * Po zetknięciu dwu lub więcej porcji Jowiszu (tj. umieszczeniu ich na polach odległych o 1) i tym samym przekroczeniu masy krytycznej, po 5 sekundach wybuchają one z siłą 2. * Przekroczenie masy krytycznej Saturnu i wybuch po 5 sekundach z siłą 2 następuje po zetknięciu ze sobą 3 lub więcej jego porcji. * Jeżeli porcja Saturnu znajdzie się w polu wybuchu o sile większej bądź równej 1, przekształca się w porcję Jowiszu, która w wyniku tego wybuchu nie zostanie zniszczona. Może ona wejść w reakcję z sąsiadującymi pierwiastami lub zostać później wykorzystana przez Homera. * Po zetknięciu jednej porcji Jowiszu i jednej porcji Saturnu obie się dematerializują (znikają). Homer może również powodować wybuchy przy użyciu eksplodujących pączków. Ma ich przy sobie 5 sztuk, jest ich też trochę rozrzuconych po pomieszczeniu. By podnieść pączek, wystarczy wejść na pole, na którym się znajduje. Pączek, który jest w rękach Homera, może zostać odbezpieczony i porzucony przez niego. Jeśli tak się stanie, wybuchnie z siłą 1 w 20 sekund po porzuceniu. Pączek odbezpieczony i porzucony przez Homera może zostać przez niego podniesiony i zabezpieczony przez ponowne wejście na pole, na którym się znajduje. Czas gry wynosi 10 wirtualnych minut. Homer na przejście z jednego pola na drugie potrzebuje 1 sekundy. Wyjątkiem są pola zawierające puszkę piwa - Homer spędza na nich 30 sekund pijąc piwo. Ponieważ jest to czas wirtualny, gracz nie musi czekać pół minuty, a jedynie odpowiedni licznik zostaje zwiększony. Po wypiciu, Homer może kontynuować pracę, a puszka piwa znika. Przepchnięcie czegokolwiek na sąsiednie pole zajmuje Homerowi 5 sekund. Jesli Homer nie porusza się, czas nie płynie. Wybuch następuje w chwili, gdy zajdą okoliczności wywołujące go i trwa 0 sekund, podobnie reakcje pierwiastków rozszczepialnych. Gdyby w jakiejś chwili były okoliczności pozwalające na zajście kilku zdarzeń, wówczas najwyższy priorytet ma połączenie się kilku porcji pierwiastka i eksplozja na skutek osiągnięcia masy krytycznej. Jeżeli może zajść jedno z kilku zjawisk o tym samym priorytecie, wybór między nimi jest dowolny. Celem gry jest zniszczenie drzwi i opuszczenie przez nie pomieszczenia w czasie nie dłuższym, niż 10 minut. Początkowy stan pokoju można przyjąć dowolny. Użytkownik steruje Homerem, wpisując polecenia w postaci tekstowej, np. ?g? oznaczające ?przejdź w górę? itp. Jeżeli na polu w kierunku, w którym chcemy przesunąć Homera, znajduje się przedmiot przesuwalny, oprócz przemieszczenia naszego bohatera nastąpi przesunięcie przedmiotu o jedno pole, oczywiście pod warunkiem, że miejsce na które przedmiot przesuwamy jest puste. Wejście na pole, na którym znajduje się pączek, powoduje zabranie go. Napisz w języku Java grę opartą na powyższym scenariuszu. Program powinien być zapisany obiektowo, w szczególności powinien umożliwiać łatwe dodawanie nowych rodzajów przedmiotów a także modyfikowanie parametrów istniejących. Program może wczytywać polecenia gracza ze standardowego wejścia i wypisywać stan planszy na standardowe wyjście.
A oto rozwiązanie:
Lab obbiektowy 3