Source of UndoableMazeGame.java


  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: }