public class UndoableMazeGame
1:
2: package maze;
3:
4: import java.awt.*;
5: import java.awt.event.*;
6: import javax.swing.*;
7:
8: public class UndoableMazeGame {
9:
10: public static void main(String[] args) {
11: Maze maze;
12: MazeBuilder builder;
13: MazeFactory factory = null;
14:
15: if (args.length > 0) {
16: if ("Harry".equals(args[0])) {
17: factory = new maze.harry.HarryPotterMazeFactory();
18: } else if ("Snow".equals(args[0])) {
19: factory = new maze.snow.SnowWhiteMazeFactory();
20: } else if ("Default".equals(args[0])) {
21: factory = new MazeFactory();
22: }
23: }
24: if (factory != null) {
25: builder = new FactoryMazeBuilder(factory);
26: } else {
27: builder = new SimpleMazeBuilder();
28: }
29: maze = MazeGameBuilder.createMaze(builder);
30: maze.setCurrentRoom(1);
31:
32: JMenuBar menubar = new JMenuBar();
33: JMenu menu = new JMenu("Command");
34: JMenuItem undoMenuItem = new JMenuItem("undo");
35: undoMenuItem.addActionListener(new MazeCommandAction(maze));
36: menu.add(undoMenuItem);
37: menubar.add(menu);
38:
39: JFrame frame;
40: frame = new JFrame("Maze -- Builder");
41: frame.getContentPane().setLayout(new BorderLayout());
42: frame.getContentPane().add(menubar, BorderLayout.NORTH);
43: frame.getContentPane().add(new Maze.MazePanel(maze), BorderLayout.CENTER);
44: frame.pack();
45: Dimension frameDim = frame.getSize();
46: Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
47: frame.setLocation(screenSize.width / 2 - frameDim.width / 2,
48: screenSize.height / 2 - frameDim.height / 2);
49: frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
50: frame.setVisible(true);
51: }
52:
53: static class MazeCommandAction implements ActionListener {
54:
55: public MazeCommandAction(Maze maze) {
56: this.maze = maze;
57: }
58:
59: public void actionPerformed(ActionEvent event) {
60: maze.undoCommand();
61: }
62:
63: protected Maze maze;
64: }
65:
66: }