Comunidad Underground Hispana  

Retroceder   Comunidad Underground Hispana > Programacion > Programación > Java


Like Tree3Me Gusta
  • 1 Post By Darkgus
  • 1 Post By Ferreter
  • 1 Post By Ferreter

Respuesta Crear Nuevo Tema
 
Compartir en twitter LinkBack Herramientas Desplegado
Antiguo 05-jun-2013, 00:15   #1
Miembro
 
Avatar de Darkgus
 
Fecha de Ingreso: febrero-2013
Amigos 6
Mensajes: 86
Gracias: 57
Agradecido 25 veces en 20 mensajes.
Predeterminado [Java] ¿Cuándo me saco la lotería?

Buenas. Sencilla aplicación para calcular en qué tiempo nos sacamos la lotería xD.

No sé el cálculo de probabilidades exacto, pero supongo que no debe haber mucha diferencia xD.

Programa trabajando:


Pues en más de 210 años máximo va logrando 5 veces 4 aciertos xD.


GUI:

Código:
import javax.swing.*;
import java.awt.*;

public class Loteria extends JFrame
{
  LoteriaEventos driverEventos = new LoteriaEventos(this);
  //Layouts de los paneles
  FlowLayout lFila1 = new FlowLayout(FlowLayout.CENTER,10,10);
  GridLayout lFila2 = new GridLayout(2,7,10,10);
  FlowLayout lFila3 = new FlowLayout(FlowLayout.CENTER,10,10);
  GridLayout lFila4 = new GridLayout(2,3,20,10);
  FlowLayout lFila5 = new FlowLayout(FlowLayout.CENTER,10,10);
  
  // fila 1
  JPanel fila1 = new JPanel();
  
  ButtonGroup opciones = new ButtonGroup();
  JCheckBox automatico = new JCheckBox("Automatico",false);
  JCheckBox manual = new JCheckBox("Manual",true);
  
  // fila 2
  JPanel fila2 = new JPanel();
  
  JLabel lblNumeros = new JLabel("Tus Números: ",JLabel.RIGHT);
  JLabel lblGanadores = new JLabel("Ganadores: ",JLabel.RIGHT);
  JTextField[] txtNumeros = new JTextField[6];
  JTextField[] txtGanadores = new JTextField[6];
  
  // fila 3
  JPanel fila3 = new JPanel();
  
  JButton btnParar = new JButton("Parar");
  JButton btnJugar = new JButton("Jugar");
  JButton btnReiniciar = new JButton("Reiniciar");
  JButton btnSalir = new JButton("Salir");
  
  // fila 4
  JPanel fila4 = new JPanel();
  
  JLabel lbl3Matchs = new JLabel("3 de 6: ",JLabel.RIGHT);
  JTextField txt3Matchs = new JTextField("0");
  JLabel lbl4Matchs = new JLabel("4 de 6: ",JLabel.RIGHT);
  JTextField txt4Matchs = new JTextField("0");
  JLabel lbl5Matchs = new JLabel("5 de 6: ",JLabel.RIGHT);
  JTextField txt5Matchs = new JTextField("0");
  JLabel lblBINGO = new JLabel("6 de 6: ",JLabel.RIGHT);
  JTextField txtBINGO = new JTextField("0");
  JLabel lblIntentos = new JLabel("Intentos: ",JLabel.RIGHT);
  JTextField txtIntentos = new JTextField("0");
  JLabel lblYears = new JLabel("Años: ",JLabel.RIGHT);
  JTextField txtYears = new JTextField("0");
  
  // fila 5
  JPanel fila5 = new JPanel();
  JLabel lblDinero = new JLabel("Dinero Gastado: ",JLabel.RIGHT);
  JTextField txtDinero = new JTextField("0");
  
  public Loteria()
  {
    super("Lotería TEPELO - Mitsu");
    
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    GridLayout design = new GridLayout(5,1,10,10);
    setLayout(design);
    
    automatico.addItemListener(driverEventos);
    manual.addItemListener(driverEventos);
    btnParar.addActionListener(driverEventos);
    btnJugar.addActionListener(driverEventos);
    btnReiniciar.addActionListener(driverEventos);
    btnSalir.addActionListener(driverEventos);
    
    // agregamos componentes a la fila 1
    fila1.setLayout(lFila1);
    opciones.add(automatico);
    opciones.add(manual);
    fila1.add(automatico);
    fila1.add(manual);
    add(fila1);
    
    // agregamos componentes a la fila 2
    fila2.setLayout(lFila2);
    fila2.add(lblNumeros);
    for(int i=0; i<6; i++)
    {
      txtNumeros[i] = new JTextField(null);
      fila2.add(txtNumeros[i]);
    }
    fila2.add(lblGanadores);
    for(int i=0; i<6; i++)
    {
      txtGanadores[i] = new JTextField(null);
      txtGanadores[i].setEditable(false);
      fila2.add(txtGanadores[i]);
    }
    add(fila2);
    
    // agrega componentes a la fila 3
    fila3.setLayout(lFila3); // flow layout
    btnParar.setEnabled(false);
    fila3.add(btnParar);
    fila3.add(btnJugar);
    fila3.add(btnReiniciar);
    fila3.add(btnSalir);
    add(fila3);
    
    // agrega componentes a la fila 4
    fila4.setLayout(lFila4);
    fila4.add(lbl3Matchs);
    txt3Matchs.setEditable(false);
    fila4.add(txt3Matchs);
    fila4.add(lbl4Matchs);
    txt4Matchs.setEditable(false);
    fila4.add(txt4Matchs);
    fila4.add(lbl5Matchs);
    txt5Matchs.setEditable(false);
    fila4.add(txt5Matchs);
    fila4.add(lblBINGO);
    txtBINGO.setEditable(false);
    fila4.add(txtBINGO);
    fila4.add(lblIntentos);
    txtIntentos.setEditable(false);
    fila4.add(txtIntentos);
    fila4.add(lblYears);
    txtYears.setEditable(false);
    fila4.add(txtYears);
    add(fila4);
    
    fila5.setLayout(lFila5);
    fila5.add(lblDinero);
    txtDinero.setPreferredSize(new Dimension(100,25) );
    fila5.add(txtDinero);
    add(fila5);
    
    setVisible(true);
    pack();
  }
  
  
  
} // fin gui
  
Eventos:

Código:
import java.awt.event.*;
import javax.swing.*;

public class LoteriaEventos implements ItemListener,ActionListener,Runnable
{
  Loteria gui;
  Thread jugando; // variable q hara un trabajo
  
  public LoteriaEventos(Loteria in) // recibe el objeto clase de Loteria
  {
    gui = in; // se lo asigna al objeto Loteria 'gui'
  }
  
  
  void aumentaIntentos(JTextField intentos) // recibe el textfield de intentos
  {
    int numIntentos = Integer.parseInt(intentos.getText() ); // convierte a numero el campo intentos
    numIntentos++; // aumenta en 1
    intentos.setText(""+numIntentos); // muestra el valor actual en el campo intentos
    
  }
  
  void aumentaDinero(JTextField dinero) {
    double dineroGastado = Double.parseDouble(dinero.getText() );
    dineroGastado+=3.50; // cada intento equivale al costo de la loteria. 3.50
    dinero.setText(""+dineroGastado); // muestra cuanto se va gastando
  }
  
  //determina si el valor de la bola ya ha sido sacado
  boolean numeroRepetido(int num, JTextField[] numeros, int count)
  {
    // num = bola, numeros = textfields de numeros, count = cuenta
    for(int i=0; i<count; i++)
    {
      // si el numero q se ha sacado ya esta en algun textfield
      if(Integer.parseInt(numeros[i].getText()) == num)
      {
        return true; //devuelve true
      }
    }
    return false;
  }
  
  
  boolean compararNumeros(JTextField txtGanadorActual, JTextField[] elegidos)
  {
    // textfield actual de ganadores = txtGanadorActual, txtNumeros = elegidos
    for(int i=0; i<6; i++)
    {
      String winText = txtGanadorActual.getText(); // extrae el valor del textfield ganador actual
      if(winText.equals(elegidos[i].getText()) ) // si es igual al contenido de algun textfield numeros elegidos
      {
        return true; // devuelve true
      }
    }
    return false;
  }
  
  
  public void itemStateChanged(ItemEvent e) // elgie numeros automaticamente
  {
    Object item = e.getItem(); // obtiene el item elegido
    if(item == gui.automatico) // si se elige modo automatico
    {
      for(int i=0; i<6; i++)
      {
        int bolaAuto;
        do
        {
          bolaAuto = (int) Math.floor(1+ Math.random() * 50); // tira la bola
        } while(numeroRepetido(bolaAuto, gui.txtNumeros,i)); // se tira la bola mientras se saque un numero q ya ha salido
        gui.txtNumeros[i].setText(""+bolaAuto); // si no se ha repetido el numero muestra la bola en el textfield[i] numeros elegidos
      }
    } // fin if
    
    else // si se elige modo manual
    {
      for(int i=0; i<6; i++)
      {
        gui.txtNumeros[i].setText(null); // limpia los textfields numeros
      }
    } // fin else
    
  } // fin itemListener
  
  public void actionPerformed(ActionEvent evento)
  {
    String comando = evento.getActionCommand();
    if(comando.equals("Parar") )
    {
      pararJuego(); // para en juego
    }
    if(comando.equals("Jugar"))
    {
      empezarJuego(); // inicia el juego
    }
    if(comando.equals("Reiniciar"))
    {
      limpiarCampos(); // limpia los textfields
    }
    if(comando.equals("Salir")) {
      System.exit(0);
    }
    
  } // fin actionListener
  
  void empezarJuego()
  {
    jugando = new Thread(this); // se le asigna un trabajo al objeto de la clase y "jugando" hace referencia al objeto clase y su tarea. 
                                // Toda clase tiene un objeto.
    jugando.start(); // iniciamos el thread
    gui.btnJugar.setEnabled(false);
    gui.btnReiniciar.setEnabled(false);
    gui.btnSalir.setEnabled(false);
    gui.automatico.setEnabled(false);
    gui.manual.setEnabled(false);
    gui.btnParar.setEnabled(true);
    for(int i=0; i<6; i++) {
      gui.txtNumeros[i].setEditable(false);
    }
  }
  
  void pararJuego()
  {
    gui.btnJugar.setEnabled(true);
    gui.btnReiniciar.setEnabled(true);
    gui.btnSalir.setEnabled(true);
    gui.automatico.setEnabled(true);
    gui.manual.setEnabled(true);
    gui.btnParar.setEnabled(false);
    jugando = null; // para la tarea
    for(int i=0; i<6; i++) {
      gui.txtNumeros[i].setEditable(true);
    }
  }
  
  void limpiarCampos() // metodo llamado por el boton Reiniciar
  {
    
    for(int i=0; i<6; i++)
    {
      // blanque los textfields de los numeros
      gui.txtNumeros[i].setText(null);
      gui.txtGanadores[i].setText(null);
    }
      // y establece los resultados a 0
      gui.txt3Matchs.setText("0");
      gui.txt4Matchs.setText("0");
      gui.txt5Matchs.setText("0");
      gui.txtBINGO.setText("0");
      gui.txtIntentos.setText("0");
      gui.txtYears.setText("0");
      gui.txtDinero.setText("0");
      
      for(int i=0; i<6; i++) {
      gui.txtNumeros[i].setEditable(true);
    }
  } // fin metodo limpiarCampos
  
  public void run() // metodo que corre el thread
  {
    Thread thisThread = Thread.currentThread(); // Devuelve una referencia de la tarea del objeto que se ejecuta actualmente.
    System.out.println(thisThread);
    System.out.print(jugando);
    // si la referencia de la tarea activa actualmente es la tarea de la clase (jugando), se ejecuta el loop
    while(jugando == thisThread)
    {
      aumentaIntentos(gui.txtIntentos); // aumenta los intentos
      aumentaDinero(gui.txtDinero);
      int draw = Integer.parseInt(gui.txtIntentos.getText() ); // obtiene los intentos hasta el momento
      float numYears = (float) draw/52; // divide los intentos entre 52 para obtener el tiempo de juego
      gui.txtYears.setText(""+numYears); // lo muestra en el campo txtYears
      
      int aciertos = 0;
      for(int i=0; i<6; i++){
        int bola;
        do{
          bola = (int) Math.floor(1 + Math.random() * 50); // tira la bola
        } while(numeroRepetido(bola,gui.txtGanadores,i)); // mientras se saque un numero que ya ha salido
        
        gui.txtGanadores[i].setText(""+bola); // si no ha salido, lo muestra en el textfield[i] de ganadores
        
        if(compararNumeros(gui.txtGanadores[i],gui.txtNumeros)) { // si el numero sacado coincide con alguno de los numeros elegidos
        aciertos++;}
        
      } // fin for
      
      switch(aciertos)
      {
        case 3: aumentaIntentos(gui.txt3Matchs); // si se ha sacado 3 aciertos, aumenta el textfield 3 aciertos
        break;
        case 4: aumentaIntentos(gui.txt4Matchs);
        break;
        case 5: aumentaIntentos(gui.txt5Matchs);
        break;
        case 6: aumentaIntentos(gui.txtBINGO); // si se saca 6 de 6
        gui.btnParar.setEnabled(false);
        gui.btnReiniciar.setEnabled(true);
        gui.btnJugar.setEnabled(true);
        jugando = null; // para el thread
        JOptionPane.showMessageDialog(null,null,"¡Ha ganado la lotería!",2,null);
        break;
      }
      
      try
      {
        Thread.sleep(100); // tiempo de actualizacion de numeros
      }
      catch(InterruptedException e)
      {
        // no hacer nada
      }
      
    } // fin while
    
  } // fin metodo run
  
} // fin clase
  
Main:

Código:
import javax.swing.UIManager;

/**
 *
 * @author Migugami
 */
public class Main {
    public static void main(String[] per)
  {
    try
    {
      UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
    Loteria loteria = new Loteria();
    
  }
}
  

JAR:

[Solo usuarios registrados pueden ver los links. REGISTRARSE]




Bendiciones.
Ferreter le gusta esto.
__________________

Última edición por Darkgus; 05-jun-2013 a las 18:25
Darkgus está desconectado   Responder Citando
El Siguiente Usuario Agradeció a Darkgus Por Este Mensaje:
Ferreter (05-jun-2013)
Antiguo 05-jun-2013, 12:43   #2
Habitual
 
Avatar de Ferreter
 
Fecha de Ingreso: noviembre-2012
Ubicación: México Oaxaca
Amigos 5
Mensajes: 243
Gracias: 138
Agradecido 48 veces en 44 mensajes.
Predeterminado Respuesta: [Java] ¿Cuándo me saco la lotería?

Que estafa xD

Pero usa la herramienta que hice hombre....

[Solo usuarios registrados pueden ver los links. REGISTRARSE]



Busca las etiquetas....
[.COLOR="LemonChiffon"][./COLOR]
para cambiar los colores

o descargarlo ya como esta

[Solo usuarios registrados pueden ver los links. REGISTRARSE]

Darkgus le gusta esto.
Ferreter está desconectado   Responder Citando
El Siguiente Usuario Agradeció a Ferreter Por Este Mensaje:
Darkgus (05-jun-2013)
Antiguo 05-jun-2013, 18:25   #3
Miembro
 
Avatar de Darkgus
 
Fecha de Ingreso: febrero-2013
Amigos 6
Mensajes: 86
Gracias: 57
Agradecido 25 veces en 20 mensajes.
Predeterminado Respuesta: [Java] ¿Cuándo me saco la lotería?

Listo machine, de aquí vuelvo para colorearlo con tu app.

Saludos!
__________________
Darkgus está desconectado   Responder Citando
Antiguo 05-jun-2013, 18:52   #4
Habitual
 
Avatar de Ferreter
 
Fecha de Ingreso: noviembre-2012
Ubicación: México Oaxaca
Amigos 5
Mensajes: 243
Gracias: 138
Agradecido 48 veces en 44 mensajes.
Predeterminado Respuesta: [Java] ¿Cuándo me saco la lotería?

Solo un detalle,El programa es muy lento,utiliza hilos para este tipo de programas son bastante fáciles de usar

Edito: Puff no me di cuenta que hay uno metido hay

Última edición por Ferreter; 05-jun-2013 a las 19:02
Ferreter está desconectado   Responder Citando
El Siguiente Usuario Agradeció a Ferreter Por Este Mensaje:
Darkgus (05-jun-2013)
Antiguo 05-jun-2013, 19:09   #5
Miembro
 
Avatar de Darkgus
 
Fecha de Ingreso: febrero-2013
Amigos 6
Mensajes: 86
Gracias: 57
Agradecido 25 veces en 20 mensajes.
Predeterminado Respuesta: [Java] ¿Cuándo me saco la lotería?

Jajaja Hace falta más ojo compa xDD

PD: ¿A qué te refieres con lento? ¿Por la actualización de numeros?
__________________
Darkgus está desconectado   Responder Citando
Antiguo 06-jun-2013, 17:25   #6
Habitual
 
Avatar de Ferreter
 
Fecha de Ingreso: noviembre-2012
Ubicación: México Oaxaca
Amigos 5
Mensajes: 243
Gracias: 138
Agradecido 48 veces en 44 mensajes.
Predeterminado Respuesta: [Java] ¿Cuándo me saco la lotería?

Creo que es para que las personas se den cuenta de que es imposible ganar la lotería,Al ver que los numero cambian pero no ganas nada xD
Darkgus le gusta esto.
Ferreter está desconectado   Responder Citando
El Siguiente Usuario Agradeció a Ferreter Por Este Mensaje:
Darkgus (06-jun-2013)
Antiguo 06-jun-2013, 17:47   #7
Miembro
 
Avatar de Darkgus
 
Fecha de Ingreso: febrero-2013
Amigos 6
Mensajes: 86
Gracias: 57
Agradecido 25 veces en 20 mensajes.
Predeterminado Respuesta: [Java] ¿Cuándo me saco la lotería?

Una imagen vale más que mil palabras:



xDD
__________________
Darkgus está desconectado   Responder Citando
Respuesta

Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas están Activado
[IMG] está Activado
El Código HTML está Desactivado
Trackbacks están Activado
Pingbacks están Activado
Refbacks están Activado





Portal Hacker
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0