Итак, я пытаюсь оживить общую головоломку Tower of Hanoi. Я уже написал алгоритм, чтобы сделать это в консоли, но я хочу сделать JApplet, который всплывает и оживляет головоломку, решаемую после того, как я попрошу количество дисков. Вот мой код для алгоритма, если это помогает. Просто ищите какую-то инструкцию, не нужно выписывать весь код. Благодарю.Как анимировать Башню Ханоя?
Это мой код для алгоритма.
public class TowerofHanoi extends JFrame{
static int count= 0;
public void move(int n, String start, String auxiliary, String end) {
if (n == 1) {
count++;
System.out.println(start + " -> " + end);
} else {
count++;
move(n - 1, start, end, auxiliary);
System.out.println(start + " -> " + end);
move(n - 1, auxiliary, start, end);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
TowerofHanoi towersOfHanoi = new TowerofHanoi();
System.out.print("Enter number of discs: ");
Scanner scanner = new Scanner(System.in);
int discs = scanner.nextInt();
towersOfHanoi.move(discs, "A", "B", "C");
System.out.println("This puzzle took "+count+" moves.");
}
public void paint(Graphics g) {
g.drawRect (10, 10, 200, 200);
}
public TowerofHanoi(){
setPreferredSize(new Dimension(WIDTH, HEIGHT));
}
}
Это мой код для JApplet.
public class Graphics_TOH {
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame = new JFrame ("Draw Person");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
TowerofHanoi panel = new TowerofHanoi();
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
}
Вы должны знать координаты «колышек» и размер каждого «диска». Вероятно, вы должны начать создавать как минимум класс диска. Если вы планируете делать гладкую анимацию, то это очень широкий запрос. –
* «но я хочу сделать JApplet» * Вы уже пару лет слишком поздно для этого. См. [Устаревшая поддержка плагинов Java] (http://www.gizmodo.com.au/2016/01/rest-in-hell-java-plug-in/) и [Переход в плагин-бесплатно] (https: //blogs.oracle.com/java-platform-group/entry/moving_to_a_plugin_free). –
Большая часть вашей проблемы связана с «состоянием», какое состояние является пользовательским интерфейсом в настоящее время и каким состоянием вы хотите быть в будущем. Анимация - это изменение во времени, поэтому из точки A в точку B вам нужно знать, сколько времени это может потребоваться, из этого вы настроили «цикл анимации» и вычислили ход с начальной точки. В большинстве случаев что-то вроде [Swing Timer] (http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html) будет прекрасно, но ничто не ставит хорошую простую библиотеку анимации – MadProgrammer