pioneers/Map.py
2012-01-18 22:33:27 -05:00

51 lines
1.4 KiB
Python

# odd-numbered rows are right-shifted by half a tile width
class Map(object):
def __init__(self):
self._arr = []
self._list = []
self._finalized = False
def add(self, row, col, tile):
self._extend(row, col)
self._arr[row][col] = tile
self._list.append(tile)
self._finalized = False
def get(self, row, col):
if row < 0 or len(self._arr) <= row:
return None
if col < 0 or len(self._arr[row]) <= col:
return None
return self._arr[row][col]
def _extend(self, row, col):
while len(self._arr) <= row:
self._arr.append([])
while len(self._arr[row]) <= col:
self._arr[row].append(None)
def _finalize(self):
if self._finalized:
return
self._neighbors = {}
def check(_r, _c, tile):
n = self.get(_r, _c)
if n:
self._neighbors[_c].append(n)
for row, r in enumerate(self._arr):
for col, tile in enumerate(r):
if tile:
self._neighbors[tile] = []
offset = row & 1
for i in range(2):
c = col - 1 + i + offset
check(row - 1, c)
check(row + 1, c)
check(row, col - 1)
check(row, col + 1)
self._finalized = True
def number(self):
self._finalize()