Java + Swing 012. Modo diseño en NetBeans. Juego de números aleatorios utilizando Thread y Random.

Ejercicio: Realizar un juego para adivinar un número. Para ello generar un número de forma aleatoria utilizando Thread y Random. El proceso termina cuando el usuario acierta o cancela el juego.
En el diseño vemos la descripción en rojo del nombre de variables que le asignamos a cada objeto, es importante para entender mejor el funcionamiento de los métodos.
Diseño del formulario utilizando JFrame.
Como elementos utilizamos “Etiquetas”, “Botón” y “Campos de Texto”.
Se puede cambiar el “Nombre de variable” de cada objeto haciendo clic derecho y “Cambiar nombre de variable…”. Se puede usar la que se ajuste al código de más abajo. Los campos de texto para resultados se puede indicar como deshabilitado, desmarcando “enabled” en “Properties o Propiedades” de modo diseño.
Observación: Tomar en cuenta que hay que utilizar las importaciones “import”, básico para utilizar ciertos métodos y objetos. El “setLocationRelativeTo(null)” sirve para centrar el formulario. Los métodos llamados en el constructor de la clase se inician al ejecutar el formulario.
Creamos los métodos siguientes en el apartado “Fuente”. Estos métodos utilizan conversiones de tipos de datos, controles de excepciones y demás para controlar lo mejor posible el resultado. También se crea un objeto “Thread” y se implementa sus métodos.
Código Java
public void iniciar(){
this.num.setEnabled(false);
this.num.setText(null);
this.result.setText(null);
this.nuevo.setEnabled(true);
this.nuevo.setText("Nuevo");
this.jugar.setEnabled(false);
this.comprobar.setEnabled(false);
contador=0;
}
public void nuevo(){
if(this.nuevo.getText().equals("Nuevo")){
this.nuevo.setText("Cancelar");
this.jugar.setEnabled(true);
salir = true;
Thread t = new Thread(new Runnable() {
@Override
public void run() {
Random ran = new Random();
while (salir) {
int nextInt = (int)(ran.nextDouble()*100);
result.setText(String.valueOf(nextInt));
numAleatorio = nextInt;
try {
//Se puede ampliar o reducir el tiempo de espera.
Thread.sleep(100);
} catch (InterruptedException ex) {
Logger.getLogger(JuegoNum.class.getName()).log(Level.SEVERE, null, ex);
}
if(salir==false){
break;
}
}

}
});
t.start();
}
else{
iniciar();
}
}
public void jugar(){
this.num.setEnabled(true);
salir = false;
this.jugar.setEnabled(false);
this.comprobar.setEnabled(true);
this.result.setText("**");
}
public void comprobar(){
int numUser;
try {
numUser = Integer.parseInt(this.num.getText());
contador++;
if(numUser==numAleatorio){
JOptionPane.showMessageDialog(null, "Perfecto: Acertaste después de " + contador + " intentos. "+"(" + numUser+"="+numAleatorio+")");
iniciar();
}
else{
JOptionPane.showMessageDialog(null, "Fallaste: Intenta de nuevo. " + "Van : " + contador + " intentos.");
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Requiere dato numérico.");
}

}
Utilizamos el evento “ActionPerformed” para llamar los métodos desde los botones. Para utilizar un “Evento” hacemos clic derecho sobre el objeto y seleccionamos “Eventos” de la lista utilizamos la que podamos aplicar al objeto. En la lista de evento vemos los comentarios especificando a que objetos se aplican.
Código Java
    private void nuevoActionPerformed(java.awt.event.ActionEvent evt) {
nuevo();//Evento ActionPerformed para botón Nuevo.
}

private void jugarActionPerformed(java.awt.event.ActionEvent evt) {
jugar();//Evento ActionPerformed para botón Jugar.
}

private void comprobarActionPerformed(java.awt.event.ActionEvent evt) {
comprobar();//Evento ActionPerformed para botón Comprobar.
}
En la imagen el formulario en ejecución.

No hay comentarios :

Publicar un comentario