Capitulo 13 Java – Colaboracion entre clases
Por lo que en este capitulo haremos un programa ejemplo que permita jugar a los dados, en el que se tiran dos dados y si sacan el mismo numero imprima doble.
Lo primero que hacemos es identificar las clases:
Podemos identificar la clase Dado y la clase Juego.
Luego los atributos y los métodos de cada clase:
Dado
atributos
valor
métodos
tirar
imprimir
devolverValor
Juego
atributos
2 Dados (2 objetos de la clase Dado)
métodos
constructor
jugar
Creamos un proyecto en Eclipse llamado: Dados y dentro del proyecto creamos dos clases llamadas: Dado y Juego.Codigo:
public class Dado {
private int azar;
public void tirar() {
azar=1+(int)(Math.random()*6);
}
public void imprimir() {
System.out.println("El valor del dado es:"+azar);
}
public int devolverValor() {
return azar;
}
}
importjava.util.Scanner;
public class Juego {
private Dado dado1,dado2;
public Juego () {
dado1=new Dado();
dado2=new Dado();
}
public void jugar() {
dado1.tirar();
dado1.imprimir();
dado2.tirar();
dado2.imprimir();
if (dado1.devolverValor()==dado2.devolverValor()) {
System.out.println("Es doble");
} else {
System.out.println("No es doble");
}
}
public static int menu() {
int opcion;
System.out.println(" |-------------------------------------------------|");
System.out.println(" | ~ MENU PRINCIPAL ~ |");
System.out.println(" |-------------------------------------------------|");
System.out.println(" | 1. Tirar dados |");
System.out.println(" | 0. Salir de la aplicación |");
System.out.println(" |-------------------------------------------------|\n");
System.out.println("Introduzca la opción que desea:");
Scanner teclado = new Scanner (System.in);
opcion = teclado.nextInt();
return opcion;
}
public static void main(String[] ar){
int opcion;
do {
opcion = Juego.menu();
switch (opcion) {
case 1:
Juego jue=new Juego ();
jue.jugar();
break;
case 0:
System.out.println("Se acabo la partida");
break;
default:
break;
}
} while (opcion != 0);
}
}
public class Dado {
private int azar;
El método tirar almacena el valor aleatorio (para generar un valor al azar lo realizamos con random de la clase Math que nos dara un valor entre 0 y 1, pero nunca 0 o 1. Luego este valor generado multiplicado por 6, incluyendo int para tomar la parte entera y sumandole 1 para que no salga el 0): public void tirar() {
azar=1+(int)(Math.random()*6);
}Le sumamos uno ya que puede generar números enteros entre 0 y 5.
El método imprimir de la clase Dado muestra por pantalla el valor del dado:
public void imprimir() {
System.out.println("El valor del dado es:"+azar);
}
Por último el método que devuelve el valor del dado se utiliza para ver si generan el mismo valor, comparando con if (ya visto en otros ejemplos)public int devolverValor() {
return azar;
}
La clase Juego define dos atributos de la clase Dado, aquí es donde esta la colaboración entre clases. public class Juego {
private Dado dado1,dado2;
En el constructor procedemos a crear los dos objetos de la clase Dado: public JuegoDeDados() {
dado1=new Dado();
dado2=new Dado();
}
En el método jugar llamamos al método tirar de cada dado, pedimos que se imprima el valor generado y finalmente procedemos a verificar si es doble o no. public void jugar() {
dado1.tirar();
dado1.imprimir();
dado2.tirar();
dado2.imprimir();
if (dado1.devolverValor()==dado2.devolverValor()) {
System.out.println("Es doble");
} else {
System.out.println("No es doble");
}
}
En el main creamos solo un objeto de la clase principal (Juego), en este main o parte principal introduzco un switch para que se le de opcion al usuario a continuar o terminar la aplicación si se pulsa 0. Es un poco repetitivo la aparicion del menú, se podria mejorar, pero es un ejemplo para ver un tipo de eleccion de continuar o finalizar.
El codigo que crea el menú al cual se llama desde el main es:
public static int menu() {
int opcion;
System.out.println(" |-------------------------------------------------|");
System.out.println(" | ~ MENU PRINCIPAL ~ |");
System.out.println(" |-------------------------------------------------|");
System.out.println(" | 1. Tirar dados |");
System.out.println(" | 0. Salir de la aplicación |");
System.out.println(" |-------------------------------------------------|\n");
System.out.println("Introduzca la opción que desea:");
Scanner teclado = new Scanner (System.in);
opcion = teclado.nextInt();
return opcion;
}Que devuelve la opcion elegida.
public static void main(String[] ar){
int opcion;
do {
opcion = Juego.menu();
switch (opcion) {
case 1:
Juego jue=new Juego ();
jue.jugar();
break;
case 0:
System.out.println("Se acabo la partida");
break;
default:
break;
}
} while (opcion != 0);
}
}
Con esto acabamos este ejemplo sencillo en el que hemos dividido el programa con dos clases.