<div class="page"> <div class="cover text-center"> <img class="mx-auto" src=/itb/images/logo_mislata.png alt="logo"> # 3 en ratlla <div class="text-end fit-content ms-auto my-3 mt-auto pt-3"> <p><strong>Autor:</strong> Joan Puigcerver Ibáñez</p> <p><strong>Correu electrònic:</strong> j.puigcerveribanez@edu.gva.es</p> <p><strong>Curs:</strong> 2024/2025</p> </div> <div> <p class="fw-bold mb-0">Llicència: BY-NC-SA</p> <p class="d-none d-md-block">(Reconeixement - No Comercial - Compartir Igual)</p> <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.ca" target="_blank"> <img class="mx-auto" src="/itb/images/license.png" alt="Licence"/> </a> </div><!--license--> </div><!--cover--> </div><!--page--> {:toc} # Objectius Implementar un programa amb estructura client-servidor amb un protocol complex utilitzant l'eniviament d'objectes. # Introducció Tots els exercicis han d'estar situats en el package corresponent. - __Package:__ ud3.exericises.tictactoe Acaba la implementació del joc 3 en ratlla basante amb el codi font proporcionat. ## Codi font - __Models__: - <a href="/itb/DAM-PSP/files/ud3/exercicis/tictactoe/models/Board.java" download="Board.java">Board.java</a> - <a href="/itb/DAM-PSP/files/ud3/exercicis/tictactoe/models/BoardChoice.java" download="BoardChoice.java">BoardChoice.java</a> - <a href="/itb/DAM-PSP/files/ud3/exercicis/tictactoe/models/TicTacToeMessage.java" download="TicTacToeMessage.java">TicTacToeMessage.java</a> - <a href="/itb/DAM-PSP/files/ud3/exercicis/tictactoe/models/TicTacToeMessageType.java" download="TicTacToeMessageType.java">TicTacToeMessageType.java</a> - __Servidor__: - <a href="/itb/DAM-PSP/files/ud3/exercicis/tictactoe/server/TicTacToeServer.java" download="TicTacToeServer.java">TicTacToeServer.java</a> - <a href="/itb/DAM-PSP/files/ud3/exercicis/tictactoe/server/TicTacToeGame.java" download="TicTacToeGame.java">TicTacToeGame.java</a> - <a href="/itb/DAM-PSP/files/ud3/exercicis/tictactoe/server/TicTacToeServerPlayerHandler.java" download="TicTacToeServerPlayerHandler.java">TicTacToeServerPlayerHandler.java</a> - __Client__: - <a href="/itb/DAM-PSP/files/ud3/exercicis/tictactoe/client/TicTacToeClient.java" download="TicTacToeClient.java">TicTacToeClient.java</a> ## TicTacToeServer El servidor és l'encarregat de gestionar les partides de 3 en ratlla. - El servidor esperarà a que es connecten dos jugadors perquè comencen una partida entre ells. - Quan dos jugadors es connecten, llançarà un nou fil que gestionarà la partida entre els dos jugadors. ### TicTacToeGame Aquest fil és l'encarregat de portar a terme la partida entre els dos jugadors connectats. Internament, emmagatzemara el tauler `Board` amb l'estat de la partida actual. Preguntarà per torns als jugadors per un moviment, que anirà actualitzant en el seu tauler. A més, comunicarà a cada jugador els moviments perquè el client puga actualitzar el seu tauler. La comunicació es gestionarà mitjançant objectes `TicTacToeMessage`, el qual té un `TicTacToeMessageType`, un missatge i un objecte. Els misatges poden ser del tipus: - `INFO`: El servidor envia un missatge d'informàció als clients. - `ERROR`: El servidor envia un missatge d'error als clients. - `START_GAME`: El servidor indica als jugadors que la partida acaba de començar. - `START_TURN`: El servidor indica a un jugador que és el seu torn i que espera rebre la seua jugada. - `WAIT_TURN`: El servidor indica a un jugador que és el torn del contrincant i que cal esperar la seua jugada. - `POST`: El client indica al servidor quina és la jugada realitzada. - `INVALID_CHOICE`: El servidor indica a un jugador que la jugada que ha intentat fer no és correcta i que ha de tornar a triar una jugada. - `UPDATE_BOARD`: El servidor indica que el tauler ha segut actualitzat amb una nova jugada, indicada en el missatge. - `END_GAME`: El servidor indica que la partida ha finalitzat. ## TicTacToeClient El client es composarà d'un únic fil d'execució que ha de reaccionar als missatges enviats pel servidor i actuar en conseqüència, seguint el protocol.