home · contact · privacy
aa5af2c6778c33444e51de1f74236e61a8442838
[plomrogue2-experiments] / new2 / plomrogue / mapping.py
1 import collections
2
3
4
5 class YX(collections.namedtuple('YX', ('y', 'x'))):
6
7     def __add__(self, other):
8         return YX(self.y + other.y, self.x + other.x)
9
10     def __sub__(self, other):
11         return YX(self.y - other.y, self.x - other.x)
12
13     def __str__(self):
14         return 'Y:%s,X:%s' % (self.y, self.x)
15
16
17
18 class MapGeometry():
19
20     def get_directions(self):
21         directions = []
22         for name in dir(self):
23             if name[:5] == 'move_':
24                 directions += [name[5:]]
25         return directions
26
27     def move(self, start_pos, direction):
28         mover = getattr(self, 'move_' + direction)
29         return mover(start_pos)
30
31
32
33 class MapGeometryWithLeftRightMoves(MapGeometry):
34
35     def move_LEFT(self, start_pos):
36         return YX(start_pos.y, start_pos.x - 1)
37
38     def move_RIGHT(self, start_pos):
39         return YX(start_pos.y, start_pos.x + 1)
40
41
42
43 class MapGeometrySquare(MapGeometryWithLeftRightMoves):
44
45     def move_UP(self, start_pos):
46         return YX(start_pos.y - 1, start_pos.x)
47
48     def move_DOWN(self, start_pos):
49         return YX(start_pos.y + 1, start_pos.x)