spacepaste

  1.  
  2. import java.util.*;
  3. public class ProyectoFinalHanoi{
  4. public static void main(String[] args){
  5. Scanner bufEntrada = new Scanner(System.in);
  6. int cant_discos[];
  7. int cant_movs;
  8. int discos;
  9. int disco_a_mover;
  10. int i;
  11. int j;
  12. boolean puede_mover;
  13. int t1;
  14. int t2;
  15. int torres[][];
  16. torres = new int[3][10];
  17. cant_discos = new int[3];
  18. // pedir y validar cuantos discos colocar en la primer torre
  19. System.out.println("Ingrese el nro de discos (1-8):");
  20. discos = bufEntrada.nextInt();
  21. while (discos<1 || discos>8) {
  22. System.out.println("El numero de discos debe ser mayor a 0 y menor a 5:");
  23. discos = bufEntrada.nextInt();
  24. }
  25. // inicializar los datos
  26. cant_discos[0] = discos;
  27. cant_discos[1] = 0;
  28. cant_discos[2] = 0;
  29. for (i=1;i<=discos;i++) {
  30. torres[0][i] = discos-i+1;
  31. }
  32. // jugar!
  33. cant_movs = 0;
  34. // mientras no esten todos los discos en la tercer torre, el juego sigue
  35. while (cant_discos[2]!=discos) {
  36. System.out.println(""); // no hay forma directa de borrar la consola en Java
  37. // dibujar las tres torres
  38. for (i=1;i<=3;i++) {
  39. System.out.println("Torre "+i);
  40. if (cant_discos[i]==0) {
  41. System.out.println("");
  42. } else {
  43. // recorrer los discos de la torre, de arriba hacia abajo
  44. for (j=cant_discos[i];j>=1;j--) {
  45. // dibujar cada disco
  46. switch (torres[i][j]) {
  47. case 1:
  48. System.out.println(" XX");
  49. break;
  50. case 2:
  51. System.out.println(" XXXXXX");
  52. break;
  53. case 3:
  54. System.out.println(" XXXXXXXXXX");
  55. break;
  56. case 4:
  57. System.out.println(" XXXXXXXXXXXXXX");
  58. break;
  59. case 5:
  60. System.out.println(" XXXXXXXXXXXXXXXXXX");
  61. break;
  62. case 6:
  63. System.out.println(" XXXXXXXXXXXXXXXXXXXXXX");
  64. break;
  65. case 7:
  66. System.out.println(" XXXXXXXXXXXXXXXXXXXXXXXXXX");
  67. break;
  68. case 8:
  69. System.out.println(" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
  70. break;
  71. }
  72. }
  73. }
  74. System.out.println(" ----------------------------------");
  75. System.out.println("");
  76. }
  77. // solicitar movimiento
  78. System.out.println("Mover desde la torre: ");
  79. t1 = bufEntrada.nextInt();
  80. System.out.println("hacia la torre: ");
  81. t2 = bufEntrada.nextInt();
  82. // controlar que el nro de torre sea valido
  83. if (t1<1 || t1>3 || t2<1 || t2>3) {
  84. System.out.println("Movimiento invalido");
  85. //System.out.print(); // a diferencia del pseudocodigo, espera un Enter, no cualquier tecla
  86. } else {
  87. // controlar que la torre 1 tengo al menos un disco
  88. if (cant_discos[t1-1]==0) {
  89. System.out.println("Movimiento invalido");
  90. //System.out.print(); // a diferencia del pseudocodigo, espera un Enter, no cualquier tecla
  91. } else {
  92. // obtener tamanio del disco que se quiere mover
  93. disco_a_mover = torres[t1-1][cant_discos[t1-1]-1];
  94. puede_mover = true;
  95. // controlar que la torre dos no tenga discos o tenga solo discos mas grandes
  96. if (cant_discos[t2-1]!=0) {
  97. if (torres[t2-1][cant_discos[t2-1]-1]<disco_a_mover) {
  98. puede_mover = false;
  99. }
  100. }
  101. // si paso todos los controles, mover
  102. if (puede_mover) {
  103. cant_movs = cant_movs+1;
  104. cant_discos[t2-1] = cant_discos[t2-1]+1;
  105. torres[t2-1][cant_discos[t2-1]-1] = disco_a_mover;
  106. cant_discos[t1-1] = cant_discos[t1-1]-1;
  107. } else {
  108. System.out.println("Movimiento invalido");
  109. //System.out.print(); // a diferencia del pseudocodigo, espera un Enter, no cualquier tecla
  110. }
  111. }
  112. }
  113. }
  114. // mostrar resultado
  115. System.out.println(""); // no hay forma directa de borrar la consola en Java
  116. System.out.println("Juego finalizado en "+cant_movs+" movimientos!");
  117. }
  118. }
  119.