Source of MazeGameCreator.java


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