Source of MazeGameAbstractFactory.java


  1: 
  2: package maze; 
  3: 
  4: import java.awt.*;
  5: import javax.swing.*;
  6: 
  7: /*
  8:  *  Build a Maze game. 
  9:  *
 10:  *  This implmentation uses Abstract Factory design pattern. 
 11:  *
 12:  *  Run the program as follows:
 13:  *   java maze.MazeGameAbstractFactory Harry
 14:  *         -- uses the HarryPotterMazeFactory
 15:  *   java maze.MazeGameAbstractFactory Snow
 16:  *         -- uses the SnowWhiteMazeFactory
 17:  *   java maze.MazeGameAbstractFactory
 18:  *         -- uses the default MazeFactory
 19:  *
 20:  */
 21: public class MazeGameAbstractFactory { 
 22: 
 23:   public static Maze createMaze(MazeFactory factory) { 
 24:     Maze maze = factory.makeMaze(); 
 25:     Room room1 = factory.makeRoom(1); 
 26:     Room room2 = factory.makeRoom(2); 
 27:     Room room3 = factory.makeRoom(3); 
 28:     Room room4 = factory.makeRoom(4); 
 29:     Room room5 = factory.makeRoom(5); 
 30:     Room room6 = factory.makeRoom(6); 
 31:     Room room7 = factory.makeRoom(7); 
 32:     Room room8 = factory.makeRoom(8); 
 33:     Room room9 = factory.makeRoom(9); 
 34:     Door door1 = factory.makeDoor(room1, room2);
 35:     Door door2 = factory.makeDoor(room2, room3);
 36:     Door door3 = factory.makeDoor(room4, room5);
 37:     Door door4 = factory.makeDoor(room5, room6);
 38:     Door door5 = factory.makeDoor(room5, room8);
 39:     Door door6 = factory.makeDoor(room6, room9);
 40:     Door door7 = factory.makeDoor(room7, room8);
 41:     Door door8 = factory.makeDoor(room1, room4);
 42:     
 43:     door1.setOpen(true); 
 44:     door2.setOpen(false); 
 45:     door3.setOpen(true); 
 46:     door4.setOpen(true); 
 47:     door5.setOpen(false); 
 48:     door6.setOpen(true); 
 49:     door7.setOpen(true); 
 50:     door8.setOpen(true); 
 51: 
 52:     room1.setSide(Direction.NORTH, door8);
 53:     room1.setSide(Direction.EAST, factory.makeWall());
 54:     room1.setSide(Direction.SOUTH, factory.makeWall());
 55:     room1.setSide(Direction.WEST, door1);
 56: 
 57:     room2.setSide(Direction.NORTH, factory.makeWall());
 58:     room2.setSide(Direction.EAST, door1);
 59:     room2.setSide(Direction.SOUTH, factory.makeWall());
 60:     room2.setSide(Direction.WEST, door2);
 61: 
 62:     room3.setSide(Direction.NORTH, factory.makeWall());
 63:     room3.setSide(Direction.EAST, door2);
 64:     room3.setSide(Direction.SOUTH, factory.makeWall());
 65:     room3.setSide(Direction.WEST, factory.makeWall());
 66: 
 67:     room4.setSide(Direction.NORTH, factory.makeWall());
 68:     room4.setSide(Direction.EAST, factory.makeWall());
 69:     room4.setSide(Direction.SOUTH, door8);
 70:     room4.setSide(Direction.WEST, door3);
 71: 
 72:     room5.setSide(Direction.NORTH, door5);
 73:     room5.setSide(Direction.EAST, door3);
 74:     room5.setSide(Direction.SOUTH, factory.makeWall());
 75:     room5.setSide(Direction.WEST, door4);
 76: 
 77:     room6.setSide(Direction.NORTH, door6);
 78:     room6.setSide(Direction.EAST, door4);
 79:     room6.setSide(Direction.SOUTH, factory.makeWall());
 80:     room6.setSide(Direction.WEST, factory.makeWall());
 81: 
 82:     room7.setSide(Direction.NORTH, factory.makeWall());
 83:     room7.setSide(Direction.EAST, factory.makeWall());
 84:     room7.setSide(Direction.SOUTH, factory.makeWall());
 85:     room7.setSide(Direction.WEST, door7);
 86: 
 87:     room8.setSide(Direction.NORTH, factory.makeWall());
 88:     room8.setSide(Direction.EAST, door7);
 89:     room8.setSide(Direction.SOUTH, door5);
 90:     room8.setSide(Direction.WEST, factory.makeWall());
 91: 
 92:     room9.setSide(Direction.NORTH, factory.makeWall());
 93:     room9.setSide(Direction.EAST, factory.makeWall());
 94:     room9.setSide(Direction.SOUTH, door6);
 95:     room9.setSide(Direction.WEST, factory.makeWall());
 96: 
 97:     maze.addRoom(room1);
 98:     maze.addRoom(room2);
 99:     maze.addRoom(room3);
100:     maze.addRoom(room4);
101:     maze.addRoom(room5);
102:     maze.addRoom(room6);
103:     maze.addRoom(room7);
104:     maze.addRoom(room8);
105:     maze.addRoom(room9);
106: 
107:     return maze;
108:   }
109: 
110:   public static void main(String[] args) { 
111:     Maze maze; 
112:     MazeFactory factory = null;
113: 
114:     if (args.length > 0) { 
115:       if ("Harry".equals(args[0])) { 
116:         factory = new maze.harry.HarryPotterMazeFactory(); 
117:       } else if ("Snow".equals(args[0])) { 
118:         factory = new maze.snow.SnowWhiteMazeFactory(); 
119:       }
120:     }
121:     if (factory == null) { 
122:       factory = new MazeFactory(); 
123:     }
124:     maze = createMaze(factory); 
125:     maze.setCurrentRoom(1); 
126:     maze.showFrame("Maze -- Abstract Factory");
127:   }
128: 
129: }