/**
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* $Id: InterfazJuegoGenetico.java,v 1.12 2006/12/12 19:11:10 da-romer Exp $
* Universidad de los Andes (Bogotá - Colombia)
* Departamento de Ingeniería de Sistemas y Computación
* Licenciado bajo el esquema Academic Free License version 2.1
*
* Proyecto Cupi2 (http://cupi2.uniandes.edu.co)
* Ejercicio: n11_juegoGenetico
* Autor: Mario Sánchez - 09-may-2006
* Autor: Daniel Romero - 12-dic-2006
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
package uniandes.cupi2.juegoGenetico.interfaz;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import uniandes.cupi2.juegoGenetico.mundo.Individuo;
import uniandes.cupi2.juegoGenetico.mundo.JuegoGenetico;
/**
* Esta es la ventana principal de la aplicación.
*/
public class InterfazJuegoGenetico extends JFrame
{
// -----------------------------------------------------------------
// Atributos
// -----------------------------------------------------------------
/**
* Clase principal del mundo
*/
private JuegoGenetico juegoGenetico;
/**
* El primer individuo seleccionado para realizar el entrecruzamiento
*/
private Individuo seleccionado1;
/**
* El segundo individuo seleccionado para realizar el entrecruzamiento
*/
private Individuo seleccionado2;
// -----------------------------------------------------------------
// Atributos de la interfaz
// -----------------------------------------------------------------
/**
* Es el panel donde se muestra el objetivo del nivel
*/
private PanelObjetivo panelObjetivo;
/**
* Es el panel donde se encuentran los botones para controlar el juego
*/
private PanelBotones panelBotones;
/**
* Es el panel donde se muestran los datos de un individuo
*/
private PanelDatosIndividuo panelDatosIndividuo;
/**
* Es el panel donde se muestran los individuos con los cuales se pueden hacer combinaciones
*/
private PanelIndividuos panelIndividuos;
/**
* Es el panel donde se muestran los datos del juego actual
*/
private PanelDatosJuego panelDatosJuego;
/**
* Panel con las extensiones
*/
private PanelExtension panelExtension;
// -----------------------------------------------------------------
// Constructores
// -----------------------------------------------------------------
/**
* Construye la ventana principal de la aplicación e inicializa el juego
*/
public InterfazJuegoGenetico( )
{
// Crea la clase principal
juegoGenetico = new JuegoGenetico( );
// Construye la forma
setLayout( new BorderLayout( ) );
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
setTitle( "Juego Genético" );
getContentPane( ).setBackground( Color.WHITE );
setSize( 920, 658 );
// Construye los paneles de la ventana principal
setLayout( new GridBagLayout( ) );
panelObjetivo = new PanelObjetivo( );
actualizarObjetivo( );
GridBagConstraints gbcPO = new GridBagConstraints( 0, 1, 1, 1, 0, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets( 5, 5, 5, 5 ), 0, 0 );
add( panelObjetivo, gbcPO );
panelBotones = new PanelBotones( this );
GridBagConstraints gbcPB = new GridBagConstraints( 0, 0, 2, 1, 0.9, 0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets( 5, 5, 5, 5 ), 0, 0 );
add( panelBotones, gbcPB );
panelIndividuos = new PanelIndividuos( this );
GridBagConstraints gbcPI = new GridBagConstraints( 1, 1, 1, 1, 0.9, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets( 5, 5, 5, 5 ), 0, 0 );
add( panelIndividuos, gbcPI );
panelDatosJuego = new PanelDatosJuego( this );
GridBagConstraints gbcPJ = new GridBagConstraints( 2, 0, 1, 1, 0.3, 0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets( 5, 5, 5, 5 ), 0, 0 );
add( panelDatosJuego, gbcPJ );
panelDatosIndividuo = new PanelDatosIndividuo( this );
GridBagConstraints gbcPD = new GridBagConstraints( 2, 1, 1, 1, 0.3, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets( 5, 5, 5, 5 ), 0, 0 );
add( panelDatosIndividuo, gbcPD );
panelExtension = new PanelExtension( this );
GridBagConstraints gbcPE = new GridBagConstraints( 0, 2, 3, 1, 1, 0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets( 5, 5, 5, 5 ), 0, 0 );
add( panelExtension, gbcPE );
actualizarIndividuosMostrados( );
centrar( );
}
// -----------------------------------------------------------------
// Métodos
// -----------------------------------------------------------------
/**
* Centra la ventana en la pantalla
*/
private void centrar( )
{
Dimension screen = Toolkit.getDefaultToolkit( ).getScreenSize( );
int xEsquina = ( screen.width - getWidth( ) ) / 2;
int yEsquina = ( screen.height - getHeight( ) ) / 2;
setLocation( xEsquina, yEsquina );
}
/**
* Actualiza la imagen mostrada del objetivo
*/
private void actualizarObjetivo( )
{
Individuo objetivo = juegoGenetico.darObjetivo( );
panelObjetivo.actualizarObjetivo( objetivo );
}
/**
* Selecciona un individuo y muestra sus datos
* @param ind El individuo del cual se deben mostrar los datos - ind != null
*/
public void seleccionarIndividuo( Individuo ind )
{
if( ind != seleccionado1 )
{
seleccionado2 = seleccionado1;
seleccionado1 = ind;
panelDatosIndividuo.mostrarIndividuo( ind );
}
}
/**
* Elimina el individuo que está seleccionado actualmente
*/
public void borrarSeleccionado( )
{
if( seleccionado1 != null )
{
juegoGenetico.borrarIndividuo( seleccionado1 );
panelIndividuos.desmarcar( );
actualizarIndividuosMostrados( );
}
}
/**
* Realiza un entrecruzamiento entre los individuos que actualmente están seleccionados
*/
public void cruzarSeleccionados( )
{
if( seleccionado1 != null && seleccionado2 != null )
{
if( seleccionado1.darGenero( ) == seleccionado2.darGenero( ) )
{
JOptionPane.showMessageDialog( this, "Para realizar el entrecruzamiento los individuos deben ser de géneros diferentes" );
}
else if( juegoGenetico.darNumeroIndividuos( ) == JuegoGenetico.MAXIMO_INDIVIDUOS )
{
JOptionPane.showMessageDialog( this, "Hay demasiados individuos: debe eliminar algunos para poder crear nuevos" );
}
else
{
Individuo padre = seleccionado1.darGenero( ) == Individuo.HOMBRE ? seleccionado1 : seleccionado2;
Individuo madre = seleccionado1.darGenero( ) == Individuo.MUJER ? seleccionado1 : seleccionado2;
boolean finNivel = juegoGenetico.crearNuevoIndividuo( padre, madre );
actualizarIndividuosMostrados( );
panelDatosJuego.actualizarDatosJuego( );
if( finNivel )
{
terminarNivel( );
}
}
}
}
/**
* Reinicia el juego
*/
public void reiniciarJuego( )
{
int respuesta = JOptionPane.showConfirmDialog( this, "Seguro de que quiere empezar un nuevo juego", "Reiniciar Juego", JOptionPane.YES_NO_OPTION );
if( respuesta == JOptionPane.YES_OPTION )
{
panelDatosIndividuo.mostrarIndividuo( null );
juegoGenetico.reiniciarJuego( );
panelDatosJuego.actualizarDatosJuego( );
actualizarObjetivo( );
panelIndividuos.desmarcar( );
actualizarIndividuosMostrados( );
}
}
/**
* Termina un nivel y avanza al siguiente
*/
public void terminarNivel( )
{
JOptionPane.showMessageDialog( this, "Se ha conseguido el objetivo!\nSe puede continuar con el siguiente nivel" );
juegoGenetico.avanzarNivel( );
panelDatosIndividuo.mostrarIndividuo( null );
panelDatosJuego.actualizarDatosJuego( );
actualizarObjetivo( );
panelIndividuos.desmarcar( );
actualizarIndividuosMostrados( );
}
/**
* Muestra los datos completos de un individuo usando un dialogo
* @param ind El individuo del que se deben mostrar los datos - ind != null
*/
public void mostrarDatosCompletos( Individuo ind )
{
DialogoDatosIndividuo dialogo = new DialogoDatosIndividuo( this, ind );
dialogo.setVisible( true );
}
/**
* Actualiza los individuos mostrados
*/
public void actualizarIndividuosMostrados( )
{
panelIndividuos.actualizarIndividuos( juegoGenetico.darIndividuos( ) );
validate( );
}
/**
* Cierra la aplicación
*/
public void salir( )
{
dispose( );
}
/**
* Retorna el nivel del juego
* @return Se retornó el nivel del juego
*/
public int darNivel( )
{
return juegoGenetico.darNivel( );
}
/**
* Retorna el número de jugadas que se llevan hasta el momento
* @return Retorna el numero de jugadas
*/
public int darNumeroJugadas( )
{
return juegoGenetico.darNumeroJugadas( );
}
/**
* Retorna el puntaje del juego
* @return Se retornó el puntaje del juego
*/
public int darPuntaje( )
{
return juegoGenetico.darPuntaje( );
}
// -----------------------------------------------------------------
// Puntos de Extensión
// -----------------------------------------------------------------
/**
* Método para la extensión 1
*/
public void reqFuncOpcion1( )
{
String resultado = juegoGenetico.metodo1( );
JOptionPane.showMessageDialog( this, resultado, "Respuesta", JOptionPane.INFORMATION_MESSAGE );
}
/**
* Método para la extensión 2
*/
public void reqFuncOpcion2( )
{
String resultado = juegoGenetico.metodo2( );
JOptionPane.showMessageDialog( this, resultado, "Respuesta", JOptionPane.INFORMATION_MESSAGE );
}
// -----------------------------------------------------------------
// Main
// -----------------------------------------------------------------
/**
* Este método ejecuta la aplicación, creando una nueva interfaz
* @param args Argumentos de ejecución. No deben usarse
*/
public static void main( String[] args )
{
InterfazJuegoGenetico interfaz = new InterfazJuegoGenetico( );
interfaz.setVisible( true );
}
}
|