Advertisement
ganryu

ManejadorJuego

Nov 27th, 2014
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.89 KB | None | 0 0
  1. package controlador;
  2.  
  3. import java.awt.*;
  4. import java.awt.event.*;
  5.  
  6. import javax.swing.*;
  7.  
  8. import juego.*;
  9. import juego.Tablero.Direccion;
  10. import vista.*;
  11.  
  12. /**
  13.  * Clase que relaciona los diferentes elementos de la GUI con la lógica del juego
  14.  * que se encuentra en la clase 'Tablero' del paquete 'modelo'
  15.  *
  16.  * @author Dibez, Santana
  17.  *
  18.  */
  19. public class ManejadorJuego {
  20.    
  21.     Tablero tablero;
  22.     PanelTablero panelTablero;
  23.     VentanaPrincipal ventanaPrincipal;
  24.    
  25.     /**
  26.      * Constructor único de la clase.
  27.      * Crea y muestra la ventana principal con el tablero de juego.
  28.      */
  29.     public ManejadorJuego() {
  30.         this.tablero = new Tablero();
  31.        
  32.         this.panelTablero = new PanelTablero(tablero.getCantFilas(), tablero.getCantColumnas());
  33.        
  34.         for (int fila = 0; fila < tablero.getCantFilas(); fila++) {
  35.             for (int columna = 0; columna < tablero.getCantColumnas(); columna++) {
  36.                 String casilla = tablero.getCasilla(fila, columna).toString();
  37.                 panelTablero.setBoton(fila, columna, new JButton(casilla));
  38.                 panelTablero.add(panelTablero.getBoton(fila, columna));
  39.                 panelTablero.getBoton(fila, columna).addActionListener(new BotonListener());
  40.             }
  41.         }
  42.        
  43.         panelTablero.resetearColores();
  44.        
  45.         //seteamos visibilidad
  46.         panelTablero.setVisible(true);
  47.        
  48.         this.ventanaPrincipal = new VentanaPrincipal(panelTablero);
  49.         this.ventanaPrincipal.setVisible(true);
  50.     }
  51.    
  52.     /**
  53.      * Invocado cuando se presiona una casilla.
  54.      * Verifica si la casilla contiene una moneda o no.
  55.      * Si la casilla contiene una moneda colorea las direcciones de salto
  56.      *  posibles y pregunta por la dirección en que se desea saltar.
  57.      *
  58.      * @author Dibez, Santana
  59.      *
  60.      */
  61.     private class BotonListener implements ActionListener, ObservadorPregunta {
  62.         @Override
  63.         public void actionPerformed(ActionEvent e) {
  64.             JButton casilla;
  65.             int fila, columna;
  66.             boolean respuesta = true;
  67.            
  68.             panelTablero.resetearColores();
  69.            
  70.             casilla = ((JButton) e.getSource());
  71.             fila = panelTablero.getFila(casilla);
  72.             columna = panelTablero.getColumna(casilla);
  73.            
  74.             if(tablero.esMoneda(fila, columna))
  75.             {
  76.                 if (tablero.getCantSaltos() % 3 == 0) {
  77.                     //obj que contiene en un array con todas las preguntas disponibles
  78.                     HistoricoPreguntas preguntaRandom = new HistoricoPreguntas();
  79.                    
  80.                     //se añade al panel pregunta un pregunta elegida aleatoriamente
  81.                     ManejadorPregunta manejadorPregunta = new ManejadorPregunta(preguntaRandom.sortearPregunta());
  82.                     //ventanaPrincipal.add(manejadorPregunta.getVentanaPregunta());
  83.                 }
  84.                
  85.                 if (colorearDireccionesSalto(casilla) && respuesta) {
  86.                     String direccion = preguntarDireccion();
  87.                    
  88.                     if(direccion != "") {
  89.                         saltar(fila, columna, direccion);
  90.                     }
  91.                    
  92.                     panelTablero.resetearColores();
  93.                     verificarFinJuego();
  94.                 }
  95.             }
  96.            
  97.             casilla.setSelected(false);
  98.         }
  99.        
  100.         @Override
  101.         public void Correcto() {
  102.            
  103.         }
  104.        
  105.         @Override
  106.         public void Incorrecto() {
  107.            
  108.         }
  109.     }
  110.    
  111.     /**
  112.      * Colorea las casillas en que la moneda seleccionada puede saltar
  113.      * @param casilla - el botón correspondiente a la moneda seleccionada
  114.      * @return true si la moneda tiene saltos posibles, false si no los tiene
  115.      */
  116.     private boolean colorearDireccionesSalto(JButton casilla) {
  117.         int fila = panelTablero.getFila(casilla);
  118.         int columna = panelTablero.getColumna(casilla);
  119.    
  120.         boolean tieneSaltos = false;
  121.        
  122.         if (tablero.puedeSaltar(fila, columna, Direccion.Arriba)) {
  123.             panelTablero.colorearBoton(fila - 2, columna, Color.GREEN);
  124.             tieneSaltos = true;
  125.         }
  126.        
  127.         if (tablero.puedeSaltar(fila, columna, Direccion.Abajo)) {
  128.             panelTablero.colorearBoton(fila + 2, columna, Color.GREEN);
  129.             tieneSaltos = true;
  130.         }
  131.        
  132.         if (tablero.puedeSaltar(fila, columna, Direccion.Izquierda)) {
  133.             panelTablero.colorearBoton(fila, columna - 2, Color.GREEN);
  134.             tieneSaltos = true;
  135.         }
  136.        
  137.         if (tablero.puedeSaltar(fila, columna, Direccion.Derecha)) {
  138.             panelTablero.colorearBoton(fila, columna + 2, Color.GREEN);
  139.             tieneSaltos = true;
  140.         }
  141.        
  142.         return tieneSaltos;
  143.     }
  144.    
  145.     private String preguntarDireccion() {
  146.         IngresoDireccion panelDireccion = new IngresoDireccion(panelTablero.getParent());
  147.         ventanaPrincipal.add(panelDireccion);
  148.         panelDireccion.setVisible(true);
  149.         ventanaPrincipal.remove(panelDireccion);
  150.        
  151.         return panelDireccion.getDireccion();
  152.  
  153.     }
  154.    
  155.     /**
  156.      * Llama al método saltar de 'tablero'
  157.      * y modifica las casillas de la IGU en consecuencia
  158.      *
  159.      * @param fila - Fila de la moneda que realizará el salto
  160.      * @param columna - Columna de la moneda que realizará el salto
  161.      * @param direccion - Dirección en la que saltará la moneda
  162.      */
  163.     private void saltar(int fila, int columna, String direccion) {
  164.         tablero.saltar(fila, columna, direccion);
  165.        
  166.         for (int i = 0; i < panelTablero.getCantFilas(); i++) {
  167.             for (int j = 0; j < panelTablero.getCantColumnas(); j++) {
  168.                 String casilla = tablero.getCasilla(i, j).toString();
  169.                 (panelTablero.getBoton(i, j)).setText(casilla);
  170.             }
  171.         }
  172.     }
  173.     /*
  174.     private boolean hacerPregunta() {
  175.         Pregunta pregunta = new Pregunta();
  176.  
  177.         PanelPregunta panelPregunta = new PanelPregunta(pregunta.getPregunta(),
  178.                                                         pregunta.getOpcion1().toString(),
  179.                                                         pregunta.getOpcion2().toString(),
  180.                                                         pregunta.getOpcion3().toString());
  181.         ventanaPrincipal.add(panelPregunta);
  182.    
  183.         panelPregunta.setVisible(true);
  184.        
  185.         return true;
  186.     }*/
  187.    
  188.     /**
  189.      * Testea si el jugador ha ganado o perdido el juego y
  190.      *  muestra un mensaje en consecuencia.
  191.      */
  192.     private void verificarFinJuego() {
  193.         if (tablero.victoria()) {
  194.             JOptionPane.showMessageDialog(ventanaPrincipal, "Ha ganado el juego");
  195.         } else if (tablero.derrota()) {
  196.             JOptionPane.showMessageDialog(ventanaPrincipal, "Ha perdido el juego");
  197.         }
  198.     }
  199.    
  200.     /**
  201.      * Inicia el juego
  202.      */
  203.     public static void main(String[] args) {
  204.         new ManejadorJuego();
  205.     }
  206.  
  207. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement