\pagebreak
- Creando la clase Hanoi para resolver el juego
- Creando la entrada a la aplicación
- Mejorando la interfaz
- Capturas del programa
- Repositorio
Para implementar la solución de las Torres de Hanoi crearemos un metodo que tome 4 parametros:
- n representa el numero de discos.
from_pole
representa el tubo de donde tomaremos un discoto_pole
representa el tubo donde soltaremos un discoaux_pole
representa el tubo que usaremos cuando necesitemos mover temporalmente un disco.
Lo primero que hace el metodo es verificar que n no se 0, pues en caso de serlo tendremos un return temprano.
En cualquier otro caso, entraremos a un recursión a la que le pasaremos como dato n - 1, que represent el disco siguiente, from_pole
que queda igual, per en cambio aux_pole se pasa como segundo argumento y to_pole como tercero.
Al salir de la función, concatenamos un texto que de la instruccion con el disco actual, y posteriormente volvemos a correr play, y concatenamos con el texto. Finalmente, devolvemos el texto.
package com.mycompany.app;
public class Hanoi {
public static String play(int n, char from_pole, char to_pole, char aux_pole){
String text = "";
if(n != 0){
text = text + play(n - 1, from_pole, aux_pole, to_pole);
text = text + "Move disk " + n + " from " + from_pole + " to " + to_pole + "<br>";
text = text + play(n - 1, aux_pole, to_pole, from_pole);
}
return text;
}
}
Creamos la clase principal de nuestra aplicación. En ella ejecutamos el metodo RenderUI de la clase View. Instanciamos la clase Hanoi y la usamos como parametro dentro del metodo createSingleInputView de la clase View.
package com.mycompany.app;
public class App {
public static void main(String[] args) {
View.RenderUi();
Hanoi hanoi = new Hanoi();
View.createSingleInputView(hanoi);
}
}
Anteriormente tuvimos un bug que incrementaba la altura de los componentes, para resolverlo cambiaremos la manera en la que renderizamos los componentes:
Crearemos un nuevo panel que contendrá nuestra JLabel
de respuestas, y ese panel a su vez se lo pasaremos a JScrollPane
lo que permite que podamos bajar o subir segun sea necesario.
// Create growing panel for answer
JPanel answerGrowingPanel = new JPanel();
answerGrowingPanel.setLayout(new GridBagLayout());
gbc.gridx = 1; gbc.gridy = 0;
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 1.0;
gbc.weighty = 1.0;
answerGrowingPanel.add(answer, gbc);
JScrollPane scrollPane = new JScrollPane(answerGrowingPanel);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
Con estas modificaciones logramos que nuestro programa funcione de manera adecuada.