|
1 | 1 | package org.teachingkidsprogramming.section08tdd; |
2 | 2 |
|
3 | 3 | import java.awt.EventQueue; |
| 4 | +import java.util.Arrays; |
| 5 | +import java.util.Random; |
4 | 6 |
|
5 | 7 | import javax.swing.UIManager; |
6 | 8 | import javax.swing.UnsupportedLookAndFeelException; |
7 | 9 |
|
| 10 | +import org.teachingextensions.logo.AStarPlayer; |
| 11 | +import org.teachingextensions.logo.Puzzle; |
| 12 | +import org.teachingextensions.logo.PuzzleAnimation; |
| 13 | +import org.teachingextensions.logo.PuzzleBoard; |
| 14 | +import org.teachingextensions.logo.PuzzlePlayer; |
| 15 | +import org.teachingextensions.logo.PuzzleState; |
| 16 | +import org.teachingextensions.logo.PuzzleWindow; |
| 17 | + |
| 18 | +import com.spun.util.MySystem; |
| 19 | + |
8 | 20 | public class SimplePuzzle implements Runnable |
9 | 21 | { |
10 | 22 | public static void main(String[] args) |
11 | 23 | { |
12 | 24 | EventQueue.invokeLater(new SimplePuzzle()); |
13 | 25 | } |
| 26 | + @SuppressWarnings("unused") |
| 27 | + private static int[] shuffled(int[] source) |
| 28 | + { |
| 29 | + int[] copy = Arrays.copyOf(source, source.length); |
| 30 | + Random rnd = new Random(); |
| 31 | + for (int i = copy.length - 1; i > 0; i--) |
| 32 | + { |
| 33 | + int index = rnd.nextInt(i + 1); |
| 34 | + // Simple swap |
| 35 | + int a = copy[index]; |
| 36 | + copy[index] = copy[i]; |
| 37 | + copy[i] = a; |
| 38 | + } |
| 39 | + return copy; |
| 40 | + } |
| 41 | + @Override |
14 | 42 | public void run() |
15 | 43 | { |
16 | 44 | this.setLookAndFeel(); |
17 | | - PuzzleBoard board = new PuzzleBoard(); |
18 | | - PuzzleWindow pw = new PuzzleWindow(); |
19 | | - pw.add(board); |
| 45 | + // int[] cells = {0, 1, 2, 3, 4, 5, 6, 7, 8}; |
| 46 | + // int[] shuffled = shuffled(cells); |
| 47 | + int[] shuffled = {5, 6, 2, 4, 1, 8, 7, 0, 3}; // known to be solvable |
| 48 | + MySystem.message(Arrays.toString(shuffled)); |
| 49 | + Puzzle puzzle = new Puzzle(shuffled); |
| 50 | + PuzzlePlayer player = new AStarPlayer(puzzle); |
| 51 | + PuzzleState solution = player.solve(); |
| 52 | + PuzzleBoard board = new PuzzleBoard(puzzle, solution); |
| 53 | + PuzzleWindow pw = new PuzzleWindow(board); |
20 | 54 | pw.setVisible(true); |
21 | | - new Thread(new PuzzleSolver(board)).start(); |
| 55 | + new Thread(new PuzzleAnimation(board)).start(); |
22 | 56 | } |
23 | 57 | private void setLookAndFeel() |
24 | 58 | { |
25 | 59 | try |
26 | 60 | { |
27 | 61 | UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); |
28 | 62 | } |
29 | | - catch (ClassNotFoundException ex) |
30 | | - { |
31 | | - } |
32 | | - catch (InstantiationException ex) |
33 | | - { |
34 | | - } |
35 | | - catch (IllegalAccessException ex) |
36 | | - { |
37 | | - } |
38 | | - catch (UnsupportedLookAndFeelException ex) |
| 63 | + catch (ClassNotFoundException | InstantiationException | UnsupportedLookAndFeelException |
| 64 | + | IllegalAccessException ignored) |
39 | 65 | { |
40 | 66 | } |
41 | 67 | } |
|
0 commit comments