Skip to content

Commit 08cf364

Browse files
author
Joshua Goller
committed
working on patterns
1 parent 5a2518a commit 08cf364

File tree

2 files changed

+84
-0
lines changed

2 files changed

+84
-0
lines changed

patterns/creational/abstract_factory.py

Whitespace-only changes.

patterns/creational/maze.py

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
class MazeGame():
2+
def create_maze(self):
3+
maze = Maze()
4+
room1 = Room(1)
5+
room2 = Room(2)
6+
door = Door(room1, room2)
7+
8+
room1.set_side('N', Wall())
9+
room1.set_side('E', door)
10+
room1.set_side('S', Wall())
11+
room1.set_side('W', Wall())
12+
13+
room1.set_side('N', Wall())
14+
room1.set_side('E', Wall())
15+
room1.set_side('S', Wall())
16+
room2.set_side('W', door)
17+
18+
maze.add_room(Room(1))
19+
maze.add_room(Room(2))
20+
21+
22+
class Maze():
23+
def __init__(self):
24+
self.rooms = {}
25+
26+
def add_room(self, room):
27+
self.rooms[room.room_no] = room
28+
29+
def room_no(self, no):
30+
return self.rooms[no]
31+
32+
33+
class MapSite():
34+
def enter(self):
35+
raise NotImplementedError
36+
37+
38+
class Room(MapSite):
39+
def __init__(self, room_no):
40+
self.room_no = room_no
41+
self.sides = {'N': None,
42+
'E': None,
43+
'S': None,
44+
'W': None}
45+
46+
def enter(self):
47+
print("Now standing room {0}".format(self.room_no))
48+
return
49+
50+
def set_side(self, side, target):
51+
if side not in self.sides:
52+
raise ValueError
53+
self.sides[side] = target
54+
55+
def get_side(self, side):
56+
if side not in self.sides:
57+
raise ValueError
58+
return self.sides[side]
59+
60+
61+
class Wall(MapSite):
62+
def enter(self):
63+
print("Ouch, my nose! I hit a wall.")
64+
return
65+
66+
67+
class Door(MapSite):
68+
def __init__(self, room1=None, room2=None):
69+
self.room1 = room1
70+
self.room2 = room2
71+
self.is_open = False
72+
73+
def enter(self):
74+
if self.is_open:
75+
print("Passing through a door...")
76+
else:
77+
print("Ouch! I banged my nose on a door. :(")
78+
return
79+
80+
def other_side_from(self, side):
81+
if side not in [self.room1, self.room2]:
82+
raise ValueError
83+
else:
84+
return self.room1 if side == self.room2 else self.room2

0 commit comments

Comments
 (0)