Framework Cliente - JuegoAbstracto
JuegoAbstracto.png

La clase JuegoAbstracto gestiona la lógica de cliente de un juego. Implementa el bucle principal del juego,la distribución de mensajes de servidor y eventos de usuario. La frecuencia con la que se realiza este proceso es configurable mediante una llamada a setFPSDeseados();

El desarrollador deberá crear una clase heredada e implementar todos los métodos abstractos que se detallan a continuacion:

public abstract DialogoConfiguracion damePanelConfiguracion(Frame padre)
Esta función debe devolver una instancia de DialogoConfiguracion que será mostrada al usuario cuando este vaya a crear una partida para que configure a su gusto las opciones disponibles

public abstract PanelBase damePanelJuego()
La implementación de esta función debe encargarse de crear el PanelBase donde se va a mostrar la representación del juego. Debería comprobar que los gráficos y otros recursos en precarga están ya listos antes de retornar

public abstract void procesaMensaje(String comando, Object dato)
Aqui se lleva a cabo el procesamiento de los mensajes enviados desde el módulo servidor del juego. El cliente que implemente esta función debe analizar el mensaje que le llegue y actuar en consecuencia (actualizando el panel de visualización, enviando nuevos mensajes al servidor…)

public abstract void procesaEvento(Object origen,String evento,AWTEvent datosEvento)
Este método es llamado por el framework una vez por cada evento del interfaz gráfico o de otro componente registrado que haya ocurrido entre una iteración y la siguiente en el bucle principal. Se puede aprovechar para actualizar el GUI o mandar mensajes al servidor en respuesta a eventos ocurridos en el lado de cliente. Los parámetros que recibe son:

  • origen : Componente que originó el evento. En el caso de origenes heredados de Component se puede obtener su nombre realizando el correspondiente casting y llamando a su método getName
  • evento : Nombre del evento ocurrido
  • datosEvento : Otros datos correspondientes al evento

public abstract String dameNombreJuegoCorto()
Este método debe devolver el nombre corto por el que se representa el juego


Con los métodos abstractos implementados el juego puede ser funcional, sin embargo el implementador puede encontrar util sobreescribir los siguientes métodos

public void jugadorEntra(String nombre)
Este método es llamado por el framework cuando un jugador se incorpora a la partida

public void jugadorSale(String nombre)
Este método es llamado por el framework cuando un jugador abandona la partida

public void partidaIniciada()
Se llama por el framework cuando el creador de la partida ha dado orden de comenzar

public void partidaTerminada()
Se llama por el framework cuando el servidor da por terminada una partida

//public void pasaTurno()
Lanzada por el framework cuando se recibe desde el servidor un cambio de turno. El nombre del jugador que tiene el nuevo turno se puede obtener mediante una llamada a dameJugadorConTurno en UtilidadPartida

protected boolean preprocesaMensaje(Object datos,String comando)
Permite revisar un mensaje antes de que éste sea entregado a la rutina procesaMensaje del juego. Su sobreescritura tiene sentido cuando se implementan frameworks para tipos de juegos que deben analizar ciertos mensajes que JuegoAbstracto no hace y que la implementación concreta del juego no debe recibir directamente.

Devuelve: true si el mensaje ha sido procesado y no hay que enviarlo a la implementación concreta. false e.o.c

protected boolean preprocesaEvento(Object origen,String evento,AWTEvent datosEvento)
De funcionamiento identico a preprocesaMensaje pero para eventos de usuario

public void enviarMensaje(String comando,Object datos)
Gestiona el envio de mensajes. Rara vez se deberá sobreescribir y en esos casos será por un Framework para tipos de juego


La clase JuegoAbstracto proporciona ciertos métodos llamables por el implementador para gestionar correctamente el juego:

public void pasarTurno()
Una llamada a esta función provocará que el Applet comunique al servidor la decision del cliente de pasar turno

public void iniciarPartida()
Al ser llamado informa al servidor de que se desea comenzar a jugar (sólo debería ser llamada desde el applet del creador de la partida)

public UtilidadJugadores getJugadores()
Devuelve una instancia de UtilidadJugadores que permite administrar la lista de jugadores de la partida asi como asociar/recuperar datos a los mismos

public UtilidadPartida getPartida()
Devuelve una instancia de UtilidadPartida usada para llevar control de ciertos aspectos de la partida (jugador actual, ya iniciada…)

public Recursos getRecursos()
Devuelve una instancia de Recursos que se puede usar para precargar y gestionar recursos como las imagenes del juego.

public void setFPSDeseados(int fps)
Configura el numero de actualizaciones por segundo que tiene el juego. A mayor valor mayor "fluidez" pero también mayor consumo de CPU. Para juegos con interfaz estático (por ejemplo de tablero o cartas) es recomendable ajustarlo a valores < 10


El resto de métodos existentes son para uso interno. Su sobreescritura o uso puede funcionar en esta versión pero no se garantiza que sea así en sucesivas, por lo que se debería evitar su uso directo.