© 2014, Jerzy R. Jaworowski, Instytut Teleinformatyki Politechniki Krakowskiej im. Tadeusza Kościuszki
Praca domowa 07 – game
Termin zwrotu : 25 maja godz 23.00
Zadanie uznaje się za zaliczone, gdy praca oceniona zostanie na co najmniej 6 pkt.
Należy zaproponować rozwiązanie umożliwiające realizację gry, reguły której zdefiniowane zostały w dalszym ciągu niniejszego
dokumentu. Rozwiązanie ma wykazać umiejętność stosowania technik obiektowych w procesie analizy, projektowania i implementacji
algorytmu.
Gra prowadzona jest na planszy 16-to polowej, której kolumny oznaczone są literami, a wiersze liczbami (patrz Rys. 1).
Rys. 1 Rys. 2
W grze udział bierze dwóch graczy : czerwony (red) oraz zielony (green). Każdy z graczy dysponuje dwoma pionami : jednym tzw.
dużym (w kształcie litery L) oraz drugim małym (o rozmiarze pojedynczego pola). Początkowy układ pionów (przed rozpoczęciem gry) ilustruje
Rysunek 2. Gracze wykonują ruchy naprzemiennie. Każdy z graczy realizuje swój ruch poprzez zmianę położenia obu swoich pionów, przy
czym w pierwszej kolejności musi dokonać zmiany położenia pionu dużego (pionu L), a po wykonaniu tego przemieszczenia wykonuje w
drugiej kolejności przesunięcie pionem małym (pojedynczym). Gracz, który został zablokowany, tzn. nie posiada możliwości zmiany położenia
pionu dużego (pionu L), czyli nie jest w stanie wykonać kolejnego ruchu - przegrywa partię.
Pion duży można przemieszczać w dowolny sposób : poprzez proste przesunięcie, obrót, jak również odbicie w pionie lub w poziomie.
© 2014, Jerzy R. Jaworowski, Instytut Teleinformatyki Politechniki Krakowskiej im. Tadeusza Kościuszki
Należy zaprojektować obiektowe rozwiązanie realizujące proces rozgrywki. Klasa Player winna implementować metodę :
void go()
dokonująca kolejnego ruchu określonego gracza. Klasa Game
winna implementować scenariusz rozgrywki, zapewniając możliwość utworzenia
instancji dwóch graczy (red oraz green), losowego ustalenia gracza rozpoczynającego partię (wykonującego ruch jako pierwszy), oraz
mechanizmu zapewniającego możliwość naprzemiennego wykonywania ruchów, aż do momentu rozstrzygnięcia partii w możliwie najmniejszej
liczbie ruchów (strategia rozgrywki !).
Metoda
go
winna po wykonaniu każdego ruchu (składającego się z przesunięcia dwóch własnych pionów wg. algorytmu opisanego
wyżej) zwiększać licznik ruchów o jeden.
Wynik nieparzysty oznacza, że ostatni zakończony sukcesem ruch wykonał na planszy gracz rozpoczynający grę. Wynik parzysty
wskazuje, że rozgrywka zakończyła się sukcesem gracza, który wykonywał ruch jako drugi z kolei, a partię rozstrzygnął na swoją korzyść.
Program ma być zapisany wyłącznie w dwóch plikach
Player.java
zawierającym implementację obiektu gracza, oraz
Game.java
–
zawierającym implementację mechanizmu rozgrywki wraz z programem głównym. Program nie może korzystać z jakichkolwiek bibliotek
zewnętrznych.
Proces kompilacji musi być możliwy z użyciem komendy
javac –Xlint Player.java Game.java
Uruchomienie programu winno być możliwe z użyciem komendy
java Game
Przykładowy wynik końcowy (w strumieniu wyjściowym nie powinny pojawiać się jakiekolwiek inne elementy – np. wydruki kontrolne) :
Ilość posunięć : 15
© 2014, Jerzy R. Jaworowski, Instytut Teleinformatyki Politechniki Krakowskiej im. Tadeusza Kościuszki
Wymagania :
• Klasa implementująca mechanizm gracza winna zostać zdefiniowana w pliku
Player.java
• Klasa implementująca mechanizm rozgrywki (wraz z ewentualną niezbędną strukturą danych) ora program główny (metoda main) winny
być zdefiniowane w pliku
Game.java
• W pliku README.pdf winien być zawarty szczegółowy opis organizacji struktur danych uzasadnienie, oraz szczegółowy opis przyjętej
strategii prowadzenia rozgrywki
Sposób oceny :
• 1 pkt – Kompilacja : każdy z plików winien być kompilowany bez jakichkolwiek błędów lub ostrzeżeń (w sposób omówiony wyżej)
• 1 pkt – Wykonanie : program powinien wykonywać się bez jakichkolwiek błędów i ostrzeżeń (dla pliku danych wejściowych zgodnych
z wyżej zamieszczoną specyfikacją) z wykorzystaniem omówionych wyżej parametrów linii komend
• 2 pkt – README : plik README.pdf dokumentuje w sposób kompletny i właściwy struktury danych, oraz strategię prowadzenia
rozgrywki.
• 1 pkt – Komentarze wewnętrzne : czy program jest skomentowany w sposób zapewniający zrozumienie jego działania, oraz
wyjaśniający warunki, które muszą zachodzić przed i po wykonaniu każdej z funkcji.
• 1 pkt – Styl kodowania : czy funkcji i zmienne posiadają samo-wyjaśniające nazwy ? Czy podział na funkcje ułatwia czytelność i
zrozumiałość kodu ? Czy funkcje eliminują (redukują) powtarzające się bloki kodu ? Czy wcięcia, odstępy, wykorzystanie nawiasów itp.
(formatowanie kodu) są spójne i sensowne ?
• 4 pkt – Poprawność algorytmu : czy funkcja
go
została zaimplementowane poprawnie , przy czym za samą funkcję
go
można
otrzymać dwa punkty, a za mechanizm realizujący sposób rozgrywki (strategię gry) oraz organizację przekazywania sterowania
pomiędzy graczami (mechanizm nadzoru nad scenariuszem gry) kolejne dwa pkt..