public class MazeGameCreator
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: }