// Project: Recursion // Module: hanoi2 // Source code file: DiscDispay.java // Solve Towers of Hanoi puzzle graphically. // Manage the movement of the disks on the pegs. import java.util.Vector; import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.Timer; import java.io.*; public class DiscDisplay { private Vector[] peg; private int nDisks; private Color[] color = {Color.red, Color.orange, Color.yellow, Color.green, Color.cyan, Color.blue, Color.magenta, Color.pink}; Timer timer; PrintWriter pw; public DiscDisplay(int n, Timer t) { int i; timer = t; nDisks = n; peg = new Vector[3]; for(i = 0; i <= 2; i++) peg[i] = new Vector(); for(i = nDisks; i >= 1; i--) peg[0].add(new Integer(i)); } public void move(int from, int to) { int topFrom; Object itemToMove; topFrom = peg[from].size() - 1; itemToMove = peg[from].elementAt(topFrom); peg[from].removeElementAt(topFrom); peg[to].add(itemToMove); } public void display(Graphics g) { int disk, n, left, top, width, height, value; for(n = 0; n <= 2; n++) for(disk = 0; disk <= peg[n].size() - 1; disk++) { value = ((Integer)peg[n].elementAt(disk)). intValue(); top = 200 - 15 * (disk + 1); left = 120 * (n + 1) - 15 - 5 * value; width = 20 + 10 * value; height = 15; g.setColor(color[value - 1]); g.fillRect(left, top, width, height); } g.setColor(Color.black); g.drawLine(0, 200, 500, 200); g.fillRect(112, 60, 6, 140); g.fillRect(232, 60, 6, 140); g.fillRect(352, 60, 6, 140); } }