import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; /** * @author Muharez Jabeer * Modifications by Rick Mercer */ public class ObstacleCourseGUI extends ObstacleCourse { public static void main(String[] args) { String name = JOptionPane.showInputDialog( "Enter name of file containing the obstacle course", null); ObstacleCourse aCourse = new ObstacleCourseGUI(name); // Call the method that calls your private method tryThisWay boolean foundExit = aCourse.findTheExit(aCourse.getStartRow(), aCourse .getStartColumn()); if (!foundExit) JOptionPane.showMessageDialog(null, "Could not solve"); } private JButton[][] displayBs; private char[][] course; private ObstacleCourse aCourse; private int myDelay; private boolean hasCleared = false; public ObstacleCourseGUI(String fName) { super(fName); JFrame f = new JFrame(); Container cp = f.getContentPane(); final int maxPause = 1000; // milliseconds final JSlider slider = new JSlider(0, maxPause - 20); myDelay = slider.getValue(); slider.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { myDelay = maxPause - slider.getValue(); } }); JPanel p = new JPanel(); p.add(new JLabel("slow")); p.add(slider); p.add(new JLabel("fast")); cp.add(p, "South"); course = this.getArray(); p = new JPanel(new GridLayout(course.length, course[0].length, 1, 1)); cp.add(p, BorderLayout.CENTER); displayBs = new JButton[course.length][course[0].length]; for (int i = 0; i < course.length; i++) { for (int j = 0; j < course[0].length; j++) { JButton b = new JButton(" "); //pack uses it if (course[i][j] == '+') b.setBackground(Color.orange); if (getStartRow() == i && getStartColumn() == j) { b.setText("S"); b.setBackground(Color.GREEN); } displayBs[i][j] = b; p.add(b); } } f.pack(); f.setVisible(true); } public boolean findTheExit(int row, int col) { boolean escaped = false; if (possible(row, col)) { displayBs[row][col].setText("."); pause(); escaped = super.findTheExit(row, col); if (escaped) { if (!hasCleared) { clearAll(); hasCleared = true; } displayBs[row][col].setText("0"); } else { displayBs[row][col].setText("B"); pause(); displayBs[row][col].setText("."); } } return escaped; } private void clearAll() { for (int r = 0; r < displayBs.length; r++) for (int c = 0; c < displayBs[0].length; c++) displayBs[r][c].setText(" "); } private void pause() { try { Thread.sleep(myDelay); } catch (Exception e) { throw new InternalError(); } } }