background image

© 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.  
 
 
 
 

background image

© 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 
 

background image

© 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..