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