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 tipIOException
.
- Implementați toate metodele definite în interfața
Session
(vezi metoda [http://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#sleep-long- Thread.sleep). - Comunicația se poate realiza în orice mod doriți. Clasa
Point
este serializabilă, dar enum-ulCellState
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):- Server-ul apeleaza
waitForReady
care e blocant si asteaptă un ready. - Client-ul apelează
sendReady
care semnalează că e gata de joc. - Pana la finalul jocului, pe rând se execută următoarele:
- Serverul apelează
makeMove
în timp ce clientul apeleazăgetOposingPlayerMove
și după ce primește informația legată de punct, apeleazăwriteState
. - Clientul apelează
makeMove
în timp ce serverul apeleazăgetOposingPlayerMove
și după ce primește informația legată de punct, apeleazăwriteState
.
- Serverul apelează
- Server-ul apeleaza
- Citiți cu atenție comentariile din interfața
Session
pentru a implementa corect metodele cerute.
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.