Estoy desarrollando un juego en java empleando el MVC, el esquema que he pensado es el siguiente: https://dl.dropboxusercontent.com/u/20022286/classDiagram.jpg
Se trata de un juego con varios tipos de jugadores, algunos con inteligencia artificial y otros humanos. Una partida puede ser tanto humano vs humano, humano vs IA, IA vs IA.
Cuando se dispara evento el evento de iniciar juego en la clase controlador , se ejecuta este código (no se si sería más correcto tenerlo en la clase Juego)
Código Java:
Ver original
@Override switch (eventos.valueOf(e.getActionCommand())) { case tableroAnterior: break; case tableroSig: break; case inicializar: break; case iniciarPartida: int columna=-1; while (juego.noFinalizado()) { if(juego.turnoHumano()){ //Si el jugador es humano la interfaz debe de proporcionar la eleccion del jugador columna = vista.getTirada(); } Movimiento m = c4.tirada(columna); //si es jugadorIA no se usara el parametro vista.ponerFicha(m); vista.anadirMovimiento(m); } vista.finPartida(c4.comprobarEstado()); break; default: break; } }
Mi problema es, que no se hacer el método getTirada() de la vista, respetando el MVC.
Mi intención es que al llamar al método tirada() de juego, este llama al método jugar() de la clase genérica jugador. Este método le dice a la clase Juego en que casilla pone ficha el jugador correspondiente. Para los jugadores con IA es perfecto, pero para el jugador humano no se como sincronizarlo con la interfaz de usuario respetando el MVC.
He encontrado información sobre wait() y notify(), pero no tengo claro como y donde usarlos, no se que objeto sincronizar.
También he leído sobre hilos, pero no se que código debería lanzar en un hilo aparte.
Si alguno me puede ayudar os lo agradecería mucho. :)
No se si me he explicado bien... mirando el diagrama creo que entenderéis mis intenciones. En todo caso preguntad!
PD: aunque es mi primer mensaje en el foro, ya me habéis ayudado mucho con las respuestas en otros temas. Gracias.