Páginas

Traducir

Miniprograma que apuesta quinielas de futbol en Java

Vamos a crear un pequeño programa en Java para generar apuestas de futbol. Las apuestas serán del tipo quinielísticas igual que los boletos que se venden en España.

Cada boleto esta compuesto de 8 columnas con 14 partidos. Los partidos de cada columna son apuestas con tres valores 1, X, 2. Si un equipo gana en casa es un 1, si empata es una X y si pierde es un 2. La ultima apuesta o pleno al 15 son los números de goles marcados por cada equipo que juega ese partido 0, 1, 2, M. Donde M es 3 o mas goles.

Lenguaje

Escribiremos el código con programación estructurada en funciones y lenguaje Java SE por ser ejecutable tanto en Windows como en Linux. Usaremos un editor de texto o Eclipse.

Diseño

Nada mas empezar mostraremos un mensaje de bienvenida y el menú con las opciones de pronosticar apuestas, configuración e información sobre la versión del programa.

Sobre las opciones: Apuesta, 1x2%, ?.

  • Apuesta: Elegir 'Empezar' que será la que nos calcule el pronostico y salga por pantalla.
  • 1X2 %: Configuraciones que nos calculara pronósticos al azar según porcentaje elegido.
  • ?: Información sobre la versión del programa.

Código

Escribiremos casi todo el código dentro del método main(). Nombramos a la ventana de la aplicación como 'Quiniela 2000'. La ventana tendrá un tamaño de 220 x 300 pixels no redimensionable.

  
  JFrame ventana = new JFrame("Quiniela 2000");  // Ventana
  ventana.setSize(220, 300); // 220 ancho x 300 alto   
  ventana.setResizable(false); // No dimensionable
  ventana.setVisible(true); // Visible
  ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Lo siguiente será escribir el código del menú con sus tres opciones.

  JMenuBar barraMenu=new JMenuBar(); // Barra menu
  ventana.setJMenuBar(barraMenu);
  JMenu calcular= new JMenu("Apuesta"); // Menu Apuesta
  barraMenu.add(calcular);
  JMenuItem empezar=new JMenuItem("Empezar"); // Submenu Empezar
  calcular.add(empezar);
  JMenu configurar= new JMenu("1X2 %");  // Menu Configurar
  barraMenu.add(configurar);
  ButtonGroup grupo = new ButtonGroup(); // Grupo radioButton
  JRadioButtonMenuItem rbMenuItem1,rbMenuItem2,rbMenuItem3;
  rbMenuItem1=new JRadioButtonMenuItem("55,56 - 33,33 - 11,11"); // Submenu 5-3-1
  rbMenuItem1.setSelected(true); // Por defecto esta opción seleccionada
  grupo.add(rbMenuItem1);
  configurar.add(rbMenuItem1); 
  rbMenuItem2=new JRadioButtonMenuItem("55,56 - 22,22 - 22,22"); // Submenu 5-2-2
  grupo.add(rbMenuItem2); 
  configurar.add(rbMenuItem2);
  rbMenuItem3=new JRadioButtonMenuItem("33,33 - 33,33 - 33,33"); // Submenu 3-3-3
  grupo.add(rbMenuItem3);
  configurar.add(rbMenuItem3); 
  JMenu acercaDe= new JMenu("?"); // Menu Acerca de... 
  barraMenu.add(acercaDe);
  JMenuItem sobreQuiniela=new JMenuItem("Sobre Quiniela"); // Submenu Sobre..
  acercaDe.add(sobreQuiniela);

El mensaje de bienvenida lo escribiremos como una etiqueta centrada en horizontal y vertical dentro de un contenedor tipo JPanel. Este contenedor será el mismo donde también visualizaremos los pronósticos de las apuestas.

  JPanel panel=new JPanel(new GridLayout(1,1));  // Tipo Panel
  JLabel labelBienvenido= new JLabel("¡ Bienvenido a Quiniela 2000 !",SwingConstants.CENTER);
  labelBienvenido.setVerticalAlignment(SwingConstants.CENTER);
  panel.add(labelBienvenido); // Agregar etiqueta a Panel
  ventana.add(panel); // Agregar Panel a Ventana

Ahora nos toca añadir los eventos a cada opción del menú para según lo que se elija hacer una cosa u otra.Con ActionListener y ActionPerformed crearemos la subrutinas de la opciones para los eventos de menú.

Evento accionEmpezar.

Declaramos una variable global llamada 'modoApuesta' que vamos a necesitar en la subrutina del evento para saber que configuración tomar a la hora de representar el pronostico de la apuesta.

  public class Programa  { 
    static int modoApuesta=1;
 
    // Metodo principal 
    public static void main(String[] args) {

Dentro del método principal declaramos el objeto evento accionEmpezar con su código.

  JLabel labelPartido = new JLabel("Partido",SwingConstants.CENTER);
  JLabel labelPronostico= new JLabel("Pronostico",SwingConstants.CENTER);
  Border border = LineBorder.createGrayLineBorder();
  labelPartido.setBorder(border);
  labelPronostico.setBorder(border);

  ActionListener accionEmpezar=new ActionListener() {
    public void actionPerformed(ActionEvent e) {
      panel.setLayout(new GridLayout(17,2));
      panel.removeAll();
      panel.add(labelPartido);
      panel.add(labelPronostico);
      for (int i=1, c;i<=16;i++) {
        if (i<15) c=i; else c=15;
        panel.add(new JLabel(""+c,SwingConstants.CENTER));
        panel.add(new JLabel(generaCasilla(modoApuesta,c),SwingConstants.CENTER));
      }  
      panel.revalidate();
    }
  };

Dentro de la Clase creamos un método generaCasilla() que va a utilizar el evento accionEmpezar que nos da el resultado de la casilla apostada según la variable modoApuesta

  public static String generaCasilla(int modo, int casilla) {
    Random rnd = new Random();
    int num;
  
    if (casilla<15) {
      num = rnd.nextInt(9); // Devuelve 0 a 8 
      switch(modo) {
        case 1: // 55,56 - 33,33 - 11,11
          switch(num) { 
            case 0: case 1: case 2: case 3: case 4: return "1"; 
            case 5: case 6: case 7: return "X"; 
            case 8: return "2"; 
          } break; 
        case 2: // 55,56 - 22,22 - 22,22
          switch(num) {
            case 0: case 1: case 2: case 3: case 4: return "1"; 
            case 5: case 6: return "X";
            case 7: case 8: return "2";
          } break;
        case 3: // 33,33 - 33,33 - 33,33
          switch(num) { 
            case 0: case 1: case 2:   return "1"; 
            case 3: case 4: case 5:   return "X"; 
            case 6: case 7: case 8:   return "2"; 
          } break;
      }
    }
    else {
     num=rnd.nextInt(4); // Devuelve 0 a 3
       switch(num) {
         case 0: return "0";
         case 1: return "1";
         case 2: return "2";
         case 3: return "M";
       }
    }
    return "";
  }

Evento accionConfigura.

Damos valor a la variable global modoApuesta según la opción del menú configura

  String primero = new String("Boton1");
  String segundo = new String("Boton2");
  String tercero = new String("Boton3");
   
  ActionListener accionConfigura=new ActionListener() {
    public void actionPerformed(ActionEvent e) {
      if (e.getActionCommand() == primero) modoApuesta=1;
      else
        if (e.getActionCommand() == segundo) modoApuesta=2;
        else
          if (e.getActionCommand() == tercero) modoApuesta=3;
    }
  };

Evento accionAcercaDe.

Visualizamos una ventana con información del programa con el método JOptionPane.showMessageDialog()

  ActionListener accionAcercaDe=new ActionListener() {
    public void actionPerformed(ActionEvent e) {
      JOptionPane.showMessageDialog(ventana, "Quiniela 2000 Version 1.0",
      "Sobre Quiniela",JOptionPane.INFORMATION_MESSAGE); 
      // El primer parametro muestra ventana en medio
    }
  };

Por último nos queda asignar a cada evento de la opción del menú su rutina.

  empezar.addActionListener(accionEmpezar);
  
  rbMenuItem1.addActionListener(accionConfigura);
  rbMenuItem1.setActionCommand(primero);
   
  rbMenuItem2.addActionListener(accionConfigura);
  rbMenuItem2.setActionCommand(segundo);
   
  rbMenuItem3.addActionListener(accionConfigura);
  rbMenuItem3.setActionCommand(tercero);
      
  sobreQuiniela.addActionListener(accionAcercaDe); 

Código completo

Aquí esta el código completo del programa.

  package com.popularfan.quiniela1;

  import java.awt.GridLayout;
  import java.util.Random;
  import javax.swing.*;
  import java.awt.event.*;
  import javax.swing.border.LineBorder;
  import javax.swing.border.Border;

  public class Programa  { 
 
    static int modoApuesta=1;
 
    // Metodo principal 
 
    public static void main(String[] args) {
 
      // ##################### VENTANA #############################
  
      JFrame ventana = new JFrame("Quiniela 2000");  // Ventana
      ventana.setSize(220, 300); // 220 ancho x 300 alto  
      ventana.setResizable(false); // No dimensionable
      ventana.setVisible(true); // Visible
      ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
      // ##################### BARRA MENU ##########################
  
      JMenuBar barraMenu=new JMenuBar(); // Barra menu
      ventana.setJMenuBar(barraMenu);
      JMenu calcular= new JMenu("Apuesta"); // Menu Apuesta
      barraMenu.add(calcular);
      JMenuItem empezar=new JMenuItem("Empezar"); // Submenu Empezar
      calcular.add(empezar);
      JMenu configurar= new JMenu("1X2 %");  // Menu Configurar
      barraMenu.add(configurar);
      ButtonGroup grupo = new ButtonGroup(); // Grupo radioButton
      JRadioButtonMenuItem rbMenuItem1,rbMenuItem2,rbMenuItem3;
      rbMenuItem1=new JRadioButtonMenuItem("55,56 - 33,33 - 11,11"); // Submenu 5-3-1
      rbMenuItem1.setSelected(true); // Por defecto esta opción seleccionada
      grupo.add(rbMenuItem1);
      configurar.add(rbMenuItem1); 
      rbMenuItem2=new JRadioButtonMenuItem("55,56 - 22,22 - 22,22"); // Submenu 5-2-2
      grupo.add(rbMenuItem2);
      configurar.add(rbMenuItem2);
      rbMenuItem3=new JRadioButtonMenuItem("33,33 - 33,33 - 33,33"); // Submenu 3-3-3
      grupo.add(rbMenuItem3);
      configurar.add(rbMenuItem3);
      JMenu acercaDe= new JMenu("?"); // Menu Acerca de...
      barraMenu.add(acercaDe);
      JMenuItem sobreQuiniela=new JMenuItem("Sobre Quiniela"); // Submenu Sobre..
      acercaDe.add(sobreQuiniela);
     
      // ##################### PANEL ###############################
  
      JPanel panel=new JPanel(new GridLayout(1,1));  // Tipo Panel
      JLabel labelBienvenido= new JLabel("¡ Bienvenido a Quiniela 2000 !",SwingConstants.CENTER);
      labelBienvenido.setVerticalAlignment(SwingConstants.CENTER);
      panel.add(labelBienvenido); // Agregar etiqueta a Panel
      ventana.add(panel); // Agregar Panel a Ventana
  
      // ##################### EVENTOS MENU  #######################
  
      // Evento Empezar
  
      JLabel labelPartido = new JLabel("Partido",SwingConstants.CENTER);
      JLabel labelPronostico= new JLabel("Pronostico",SwingConstants.CENTER);
      Border border = LineBorder.createGrayLineBorder();
      labelPartido.setBorder(border);
      labelPronostico.setBorder(border);
  
      ActionListener accionEmpezar=new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          panel.setLayout(new GridLayout(17,2));
          panel.removeAll();
          panel.add(labelPartido);
          panel.add(labelPronostico);
          for (int i=1, c;i<=16;i++) {
            if (i<15) c=i; else c=15;
            panel.add(new JLabel(""+c,SwingConstants.CENTER));
            panel.add(new JLabel(generaCasilla(modoApuesta,c),SwingConstants.CENTER));
          }  
          panel.revalidate();
        }
      };
  
      // Evento Configura
    
      String primero = new String("Boton1");
      String segundo = new String("Boton2");
      String tercero = new String("Boton3");
     
      ActionListener accionConfigura=new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          if (e.getActionCommand() == primero) modoApuesta=1;
          else
            if (e.getActionCommand() == segundo) modoApuesta=2;
            else
              if (e.getActionCommand() == tercero) modoApuesta=3;
        }
      };
   
      // Evento Acerca De.. 
  
      ActionListener accionAcercaDe=new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          JOptionPane.showMessageDialog(ventana, "Quiniela 2000 Version 1.0",
          "Sobre Quiniela",JOptionPane.INFORMATION_MESSAGE); // El primer parametro muestra ventana en medio
        }
      };
     
  
      // Asignar cada evento con su opcion de menu
  
      empezar.addActionListener(accionEmpezar);
  
      rbMenuItem1.addActionListener(accionConfigura);
      rbMenuItem1.setActionCommand(primero);
   
      rbMenuItem2.addActionListener(accionConfigura);
      rbMenuItem2.setActionCommand(segundo);
   
      rbMenuItem3.addActionListener(accionConfigura);
      rbMenuItem3.setActionCommand(tercero);
  
      sobreQuiniela.addActionListener(accionAcercaDe);  
    
    }

    // Metodo calcular pronostico casillas
 
    public static String generaCasilla(int modo, int casilla) {
  
      Random rnd = new Random();
      int num;
  
      if (casilla<15) {
        num = rnd.nextInt(9); // Devuelve 0 a 8 
        switch(modo) {
          case 1: // 55,56 - 33,33 - 11,11
            switch(num) { 
              case 0: case 1: case 2: case 3: case 4: return "1"; 
              case 5: case 6: case 7: return "X"; 
              case 8: return "2"; 
            } break; 
          case 2: // 55,56 - 22,22 - 22,22
            switch(num) {
              case 0: case 1: case 2: case 3: case 4: return "1"; 
              case 5: case 6: return "X";
              case 7: case 8: return "2";
            } break;
          case 3: // 33,33 - 33,33 - 33,33
            switch(num) { 
              case 0: case 1: case 2:   return "1"; 
              case 3: case 4: case 5:   return "X"; 
              case 6: case 7: case 8:   return "2"; 
            } break;
       }
     }
     else {
       num=rnd.nextInt(4); // Devuelve 0 a 3
       switch(num) {
         case 0: return "0";
         case 1: return "1";
         case 2: return "2";
         case 3: return "M";
       }
     }
     return "";
   }
 }

No hay comentarios:

Publicar un comentario