import java.util.*; public class ProyectoFinalHanoi{ public static void main(String[] args){ Scanner bufEntrada = new Scanner(System.in); int cant_discos[]; int cant_movs; int discos; int disco_a_mover; int i; int j; boolean puede_mover; int t1; int t2; int torres[][]; torres = new int[3][10]; cant_discos = new int[3]; // pedir y validar cuantos discos colocar en la primer torre System.out.println("Ingrese el nro de discos (1-8):"); discos = bufEntrada.nextInt(); while (discos<1 || discos>8) { System.out.println("El numero de discos debe ser mayor a 0 y menor a 5:"); discos = bufEntrada.nextInt(); } // inicializar los datos cant_discos[0] = discos; cant_discos[1] = 0; cant_discos[2] = 0; for (i=1;i<=discos;i++) { torres[0][i] = discos-i+1; } // jugar! cant_movs = 0; // mientras no esten todos los discos en la tercer torre, el juego sigue while (cant_discos[2]!=discos) { System.out.println(""); // no hay forma directa de borrar la consola en Java // dibujar las tres torres for (i=1;i<=3;i++) { System.out.println("Torre "+i); if (cant_discos[i]==0) { System.out.println(""); } else { // recorrer los discos de la torre, de arriba hacia abajo for (j=cant_discos[i];j>=1;j--) { // dibujar cada disco switch (torres[i][j]) { case 1: System.out.println(" XX"); break; case 2: System.out.println(" XXXXXX"); break; case 3: System.out.println(" XXXXXXXXXX"); break; case 4: System.out.println(" XXXXXXXXXXXXXX"); break; case 5: System.out.println(" XXXXXXXXXXXXXXXXXX"); break; case 6: System.out.println(" XXXXXXXXXXXXXXXXXXXXXX"); break; case 7: System.out.println(" XXXXXXXXXXXXXXXXXXXXXXXXXX"); break; case 8: System.out.println(" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); break; } } } System.out.println(" ----------------------------------"); System.out.println(""); } // solicitar movimiento System.out.println("Mover desde la torre: "); t1 = bufEntrada.nextInt(); System.out.println("hacia la torre: "); t2 = bufEntrada.nextInt(); // controlar que el nro de torre sea valido if (t1<1 || t1>3 || t2<1 || t2>3) { System.out.println("Movimiento invalido"); //System.out.print(); // a diferencia del pseudocodigo, espera un Enter, no cualquier tecla } else { // controlar que la torre 1 tengo al menos un disco if (cant_discos[t1-1]==0) { System.out.println("Movimiento invalido"); //System.out.print(); // a diferencia del pseudocodigo, espera un Enter, no cualquier tecla } else { // obtener tamanio del disco que se quiere mover disco_a_mover = torres[t1-1][cant_discos[t1-1]-1]; puede_mover = true; // controlar que la torre dos no tenga discos o tenga solo discos mas grandes if (cant_discos[t2-1]!=0) { if (torres[t2-1][cant_discos[t2-1]-1]