POO Tema 3

De la WikiLabs

Realizați a clasă care să permită funcționarea unui joc "Avioanele" în rețea, între doi jucători umani.

Cerințe

Implementați o clasă, numită seriaf.poo.tema3.communication.SessionImpl (atenție la numele pachetului), ce trebuie să implementeze interfața Session, pentru a completa funcționalitatea jocului, astfel:

  • Clasa SessionImpl trebuie să aibă doi constructori:
    • SessionImpl(int) care va deschide un socket de server și va aștepta o conexiune pe portul respectiv; acest constructor este blocant până la conectarea unui client.
    • SessionImpl(String,int) care va deschide un socket de client către host-ul specificat, pe portul specificat; acest constructor va încerca să se conecteze timp de zece secunde (o data la 100 de milisecunde) la host-ul & portul specificat; dacă după zece secunde conectarea nu se poate realiza, atunci constructorul va arunca o excepție de tip IOException (vezi metoda Thread.sleep).
  • Implementați toate metodele definite în interfața Session.
  • Comunicația se poate realiza în orice mod doriți. Clasa Point este serializabilă, dar enum-ul CellState NU este serializabil.

Observații

  • Jocul este gândit să fie jucat în doi, un jucător care va fi Host pentru un joc (server) și un jucător care se va conecta la un Host.
  • Arhitectura programului se bazează pe faptul că fiecare jucător instanțiază un SessionImpl care vor comunica între ele.
  • Ordinea în care se vor apela metodele din SessionImpl este următoarea (codul care face apelurile de metode este deja scris):
    1. Server-ul apeleaza waitForReady care e blocant si asteaptă un ready.
    2. Client-ul apelează sendReady care semnalează că e gata de joc.
    3. Pana la finalul jocului, pe rând se execută următoarele:
      1. Serverul apelează makeMove în timp ce clientul apelează getOposingPlayerMove și după ce primește informația legată de punct, apelează writeState.
      2. Clientul apelează makeMove în timp ce serverul apelează getOposingPlayerMove și după ce primește informația legată de punct, apelează writeState.
  • Citiți cu atenție comentariile din interfața Session pentru a implementa corect metodele cerute.
  • Valorile pe care le poate lua o referință de tip CellState sunt CellState.HIT sau CellState.MISS. Egalitatea se poate testa cu operatorul ==:
CellState state = ;
if(state == CellState.HIT) //...


Se dă următorul proiect Netbeans pentru dezvoltare. Acesta conține clase care pot fi utilizate pentru testarea voastră, inclusiv conține toate testele care se rulează și pe Web-CAT. Pentru a le rula, selectați Run->Test Project.


Puteți implementa oricâte alte clase, dar obligatoriu trebuie să aveți clasa SessionImpl și nu aveți voie să modificați nici una din clasele deja existente în proiect.

Link pentru upload Web-Cat, aici.