Spaces in the map layout now mean "e" or "0" (context dependent). The testing maps have been changed to reflect this.

This commit is contained in:
Patrick Marsee 2019-02-21 10:52:30 -05:00
parent 3dc9b3b2bb
commit b5930957e5
5 changed files with 130 additions and 120 deletions

View file

@ -137,7 +137,8 @@ class GameMap(object):
# p: player start (up to one per level) # p: player start (up to one per level)
# regular expressions # regular expressions
matrixRegex = re.compile(r'([ \t]*([a-z][0-9]*)+(\n))+') tileRegex = re.compile(r'([a-z ])([0-9]+|[ ])')
matrixRegex = re.compile(r'(?:[ \t]*(?:[a-z ](?:[0-9]+|[ ]))+(\n))+')
def __init__(self, name, graph, matrix, dimensions): def __init__(self, name, graph, matrix, dimensions):
self.name = name self.name = name
@ -165,7 +166,8 @@ Entering a map through stdin will be obsolete once testing is over."""
with open(infile, 'r') as f: with open(infile, 'r') as f:
data = f.read() data = f.read()
except OSError as e: except OSError as e:
print("The file could not be read. Falling back to stdin...") print("The file could not be read.")
return None
else: else:
while tryToRead: while tryToRead:
@ -205,28 +207,36 @@ list of lists of tuples."""
mat = [[]] mat = [[]]
x = 0 x = 0
y = 0 y = 0
i = 0
l = 0 l = 0
while i < len(matrixStr): while len(matrixStr) > 0:
if matrixStr[i].isalpha(): tile = GameMap.tileRegex.match(matrixStr)
j = i+1 if tile != None:
while j < len(matrixStr) and matrixStr[j].isdecimal(): tileType = tile.group(1)
j += 1 tileNum = tile.group(2)
if j == i+1: # no number if tileType == ' ':
mat[l].append((matrixStr[i], 0)) tileType = 'e'
else: if tileNum == ' ':
mat[l].append((matrixStr[i], int(matrixStr[i+1:j]))) tileNum = '0'
i = j mat[l].append((tileType, int(tileNum)))
elif matrixStr[i] == '\n': #x += 1
matrixStr = matrixStr[len(tile.group()):]
elif matrixStr[0] == '\n':
if x == 0: if x == 0:
x = len(mat[l]) x = len(mat[l])
elif x != len(mat[l]): elif x != len(mat[l]):
raise RuntimeError('Map matrix has jagged edges.') raise RuntimeError("Map matrix has jagged edges.")
l += 1 l += 1
i += 1 #x = 0
mat.append([]) mat.append([])
else: # assume it was a whitespace character. i = 1
i += 1 while i < len(matrixStr) and matrixStr[i] in ' \t\n':
i += 1
if i == len(matrixStr):
matrixStr = ''
else:
matrixStr = matrixStr[i:]
else: # This shouldn't happen, so if it does, there was an error.
raise RuntimeError("Unexpected token in map matrix: '{0}'".format(matrixStr))
y = len(mat) - 1 y = len(mat) - 1
# Now for the graph # Now for the graph

View file

@ -1,33 +1,33 @@
<map openingText="Floor 1 map loaded successfully. Normally, this would describe the environment." playerStart="5, 26"> <map openingText="Floor 1 map loaded successfully. Normally, this would describe the environment." playerStart="5, 26">
<layout> <layout>
w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0 w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w
w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0w0 w w
w0w0w0w0e0e0e0e0e0e0e0e0e0w0e0w0e0w0e0w0e0w0e0e0e0e0e0e0w0w0 w w w w w w w w w w w
w0w0w0w0e0e0e0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0w0w0 w w w w w w w
w0w0e0e0e0e0w0w0e0w0e0e0e0e0e0e0e0e0e0e0e0e0w0w0w0w0e0e0w0w0 w w w w w w w w w w w
w0w0w0e0e0e0w0w0e0w0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0e0e0e0w0w0 w w w w w w w w w
w0e0e0e0w0e0e0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0e0e0e0w0w0 w w w w w w
w0e0e0e0w0e0e0e0e0w0e0e0e0w0w0w0e0e0w0w0w0w0w0e0e0e0e0e0e0w0 w w w w w w w w w w w w
w0e0e0e0e0e0e0e0w0w0w0w0e0w0e0e0e0e0e0e0w0w0w0e0w0w0e0e0w0w0 w w w w w w w w w w w w w
w0w0w0w0w0w0w0w0w0w0e0e0e0w0e0e0e0e0e0e0w0w0w0e0w0w0e0e0w0w0 w w w w w w w w w w w w w w w w w w
w0e0e0w0e0e0e0e0w0e0e0e0e0w0e0e0w0e0w0e0e0w0w0e0e0e0e0w0w0w0 w w w w w w w w w w w
w0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0w0e0w0e0e0w0w0e0e0e0e0w0w0w0 w w w w w w w w w
w0e0e0w0e0e0e0e0w0e0e0e0e0w0e0e0e0e0e0e0e0e0w0w0e0e0e0e0e0w0 w w w w w w w
w0e0e0e0e0e0e0e0e0e0e0w0w0w0w0w0w0w0w0w0w0w0w0w0e0e0w0w0w0w0 w w w w w w w w w w w w w w w w w w
w0e0e0w0e0e0e0e0w0e0e0w0e0e0e0e0e0e0w0w0w0w0e0e0e0e0e0e0w0w0 w w w w w w w w w w
w0e0e0e0e0e0e0e0e0e0e0w0e0e0e0e0e0e0w0w0e0e0e0e0e0e0e0e0w0w0 w w w w w w
w0e0e0w0e0e0e0e0w0e0e0w0e0e0e0e0e0e0w0e0e0e0e0e0e0e0e0e0e0w0 w w w w w w
w0e0e0e0e0e0e0e0e0e0e0w0e0e0e0e0e0e0w0w0e0e0w0w0e0e0w0w0w0w0 w w w w w w w w w w
w0e0e0w0e0e0e0e0w0e0e0w0e0e0e0e0e0e0e0e0e0e0w0w0e0e0w0w0w0w0 w w w w w w w w w w
w0e0e0e0e0e0e0e0e0e0e0w0e0e0w0w0w0w0w0w0e0e0w0w0e0e0e0e0w0w0 w w w w w w w w w w w w
w0e0e0w0e0e0e0e0w0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0e0e0w0 w w w w w w
w0e0e0e0e0e0e0e0e0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0e0e0w0 w w w w
w0e0e0w0e0e0e0e0w0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0e0e0w0 w w w w w w
w0e0e0e0e0e0e0e0e0e0e0w0e0e0w0w0w0w0w0w0e0e0e0e0w0e0e0e0e0w0 w w w w w w w w w w
w0e0e0w0e0e0e0e0w0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0w0w0e0e0e0w0 w w w w w w w
w0e0e0e0e0e0e0e0e0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0w0w0e0e0e0w0 w w w w w
w0e0e0e0e0e0e0e0e0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0w0w0e0e0w0w0 w w w w w w
w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0 w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w
</layout> </layout>
<exit id="1" location="5, 10" destination="testing/test2.xml" name="upstairs"/> <exit id="1" location="5, 10" destination="testing/test2.xml" name="upstairs"/>
<exit id="2" location="21, 23" destination="testing/test4.xml" name="downstairs"/> <exit id="2" location="21, 23" destination="testing/test4.xml" name="downstairs"/>

View file

@ -1,33 +1,33 @@
<map openingText="Floor 2" playerStart="6, 10"> <map openingText="Floor 2" playerStart="6, 10">
<layout> <layout>
w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0 w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w
w0w0w0w0w0w0x3e0e0w0e0e0e0e0e0w0e0e0e0e0e0e0w0e0w0w0w0w0w0w0 w w w w w w x3 w w w w w w w w w
w0w0w0w0e0e0e0e0e0w0e0e0e0e0e0w0e0e0w0w0e0e0w0e0e0e0w0w0w0w0 w w w w w w w w w w w w w
w0w0w0w0e0e0e0e0e0w0e0e0e0e0e0w0e0e0w0w0e0e0e0e0e0e0e0e0w0w0 w w w w w w w w w w
w0w0e0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0e0e0e0e0w0w0w0e0e0e0e0w0 w w w w w w w
w0w0e0e0e0e0e0e0e0e0e0e0e0e0e0w0w0w0e0e0w0w0w0w0w0e0e0e0e0w0 w w w w w w w w w w w
w0e0e0e0w0e0w0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0e0w0w0w0w0w0e0w0 w w w w w w w w w w
w0e0e0e0w0e0w0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0e0w0w0w0w0w0e0w0 w w w w w w w w w w
w0e0e0e0e0e0e0e0e0w0e0e0e0e0w0w0w0w0e0e0w0w0w0w0w0w0w0w0w0w0 w w w w w w w w w w w w w w w w
w0w0w0w0w0w0w0w0w0w0e0e0e0w0w0w0e0e0e0e0e0e0w0w0e0e0w0w0w0w0 w w w w w w w w w w w w w w w w w w w
w0e0e0e0e0x1e0x2e0e0e0e0e0e0w0w0e0e0e0e0e0e0w0e0e0e0e0e0e0w0 w x1 x2 w w w w
w0e0w0e0e0e0e0e0e0e0e0e0e0w0w0w0e0e0e0e0e0e0w0e0e0e0e0e0e0w0 w w w w w w w
w0e0e0e0e0e0e0w0w0e0e0e0e0e0w0w0w0w0e0e0e0e0w0e0e0e0e0e0e0w0 w w w w w w w w w
w0e0e0e0e0e0e0w0w0e0e0w0w0w0w0w0w0w0w0w0e0e0w0e0e0e0w0w0w0w0 w w w w w w w w w w w w w w w w w
w0w0w0w0w0e0w0w0w0e0e0w0w0w0w0w0w0w0e0e0e0e0w0w0e0x4e0e0e0w0 w w w w w w w w w w w w w w w w w x4 w
w0w0w0w0e0e0w0w0w0e0e0w0w0w0w0w0w0w0e0e0e0e0w0w0e0e0e0e0e0w0 w w w w w w w w w w w w w w w w w
w0e0e0e0e0w0w0w0w0w0e0w0e0e0w0e0e0e0w0w0w0w0w0w0w0w0w0w0w0w0 w w w w w w w w w w w w w w w w w w w w
w0e0e0e0e0w0w0w0w0w0e0w0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0 w w w w w w w w
w0w0w0w0w0w0w0w0e0e0e0w0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0 w w w w w w w w w w
w0w0w0w0w0w0e0w0e0e0e0w0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0 w w w w w w w w w
w0e0e0e0e0e0e0w0e0e0e0w0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0 w w w w
w0e0e0e0e0e0e0w0e0e0e0w0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0 w w w w
w0e0w0w0w0w0e0e0e0e0e0e0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0 w w w w w w
w0e0w0w0w0w0e0e0e0e0e0w0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0 w w w w w w w
w0e0e0e0e0e0e0w0e0e0e0w0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0 w w w w
w0e0e0e0e0e0e0w0e0e0e0w0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0 w w w w
w0e0e0e0e0e0e0w0e0e0e0w0w0w0w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0 w w w w w w
w0w0w0w0w0w0w0w0w0w0w0w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0 w w w w w w w w w w w w
</layout> </layout>
<exit id="1" location="5, 10" destination="testing/test1.xml" name="downstairs"/> <exit id="1" location="5, 10" destination="testing/test1.xml" name="downstairs"/>
<exit id="2" location="7, 10" destination="testing/test3.xml" name="upstairs"/> <exit id="2" location="7, 10" destination="testing/test3.xml" name="upstairs"/>

View file

@ -1,23 +1,23 @@
<map openingText="Floor 3" playerStart="6, 10"> <map openingText="Floor 3" playerStart="6, 10">
<layout> <layout>
w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0 w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w
w0e0e0e0e0e0x3e0e0e0w0w0w0w0e0w0w0w0w0w0w0w0w0e0w0w0w0w0w0w0 w x3 w w w w w w w w w w w w w w w w w w
w0e0e0e0e0e0e0e0e0e0e0e0w0w0e0w0e0e0e0e0e0e0w0e0e0e0w0w0w0w0 w w w w w w w w w
w0e0e0e0e0e0e0e0e0e0e0e0w0w0e0w0e0e0e0e0e0e0w0e0e0e0w0w0w0w0 w w w w w w w w w
w0w0w0e0e0e0e0e0e0w0e0e0e0e0e0e0e0e0w0w0e0e0e0e0e0e0e0w0w0w0 w w w w w w w w w
w0w0w0e0e0e0e0e0e0w0w0e0e0e0e0e0e0e0w0w0e0e0e0e0e0e0e0w0w0w0 w w w w w w w w w w
w0w0w0w0w0w0w0w0w0w0e0e0e0e0e0w0e0e0e0e0e0w0w0e0e0e0e0e0e0w0 w w w w w w w w w w w w w w
w0w0w0w0w0w0w0w0w0w0e0e0e0e0e0w0e0e0e0e0e0w0w0e0e0e0e0e0e0w0 w w w w w w w w w w w w w w
w0w0w0w0w0e0e0e0w0w0w0w0e0e0e0w0e0e0w0w0w0w0w0w0e0e0e0e0e0w0 w w w w w w w w w w w w w w w w w
w0w0w0w0w0e0e0e0e0e0w0w0w0e0e0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0 w w w w w w w w w w w w w w w w w w w w w w w
w0e0w0w0e0e0e0x2e0e0w0w0e0e0e0e0w0w0e0e0e0e0w0e0e0e0e0e0e0w0 w w w x2 w w w w w w
w0e0w0w0e0e0e0e0e0e0w0w0w0e0e0e0e0e0e0e0e0e0w0e0e0e0e0e0e0w0 w w w w w w w w
w0e0w0w0e0e0w0w0e0w0w0w0e0e0w0w0e0e0w0e0e0e0e0e0e0e0e0e0e0w0 w w w w w w w w w w w w
w0e0e0e0e0e0w0w0e0w0w0w0w0w0w0w0w0w0w0w0w0w0w0e0w0w0w0w0w0w0 w w w w w w w w w w w w w w w w w w w w w w w
w0w0w0w0e0e0e0e0w0w0w0w0e0e0e0e0e0e0e0e0e0e0w0e0e0x4e0e0e0w0 w w w w w w w w w x4 w
w0w0w0w0e0e0e0e0w0w0w0w0e0e0e0e0e0e0e0e0e0e0w0e0e0e0e0e0e0w0 w w w w w w w w w w
w0e0e0e0e0e0w0w0w0w0w0w0e0e0e0e0e0e0e0e0e0e0w0e0e0e0e0e0e0w0 w w w w w w w w w
w0w0w0w0w0w0w0w0w0w0w0w0e0e0e0e0e0e0e0e0e0e0w0w0w0w0w0w0w0w0 w w w w w w w w w w w w w w w w w w w w
</layout> </layout>
<exit id="2" location="7, 10" destination="testing/test2.xml" name="downstairs"/> <exit id="2" location="7, 10" destination="testing/test2.xml" name="downstairs"/>
<exit id="3" location="6, 1" destination="testing/test2.xml" name="north"/> <exit id="3" location="6, 1" destination="testing/test2.xml" name="north"/>

View file

@ -1,33 +1,33 @@
<map openingText="Basement" playerStart="22, 22"> <map openingText="Basement" playerStart="22, 22">
<layout> <layout>
w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0 w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w
w0w0w0w0w0w0w0w0e0w0w0w0w0w0w0w0w0w0w0w0e0e0e0e0e0e0e0e0e0w0 w w w w w w w w w w w w w w w w w w w w
w0w0e0e0e0e0e0e0e0w0e0e0e0e0e0e0e0e0w0w0e0e0w0e0w0e0w0e0e0w0 w w w w w w w w w
w0w0e0e0e0e0e0e0e0w0e0e0e0e0e0e0e0e0w0w0w0e0w0e0w0e0w0e0e0w0 w w w w w w w w w w
w0e0e0e0w0w0e0e0e0w0e0e0e0e0e0e0e0e0e0w0e0e0e0e0e0e0e0e0e0w0 w w w w w w
w0e0e0e0w0w0e0e0e0w0w0w0e0e0w0w0w0w0w0w0w0w0w0w0e0e0w0w0w0w0 w w w w w w w w w w w w w w w w w w w w
w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0w0 w w
w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0w0 w w
w0w0w0w0e0e0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0e0e0e0w0 w w w w w w w w w w w w w w w w w w w w w w w w w
w0e0e0e0e0e0e0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0e0w0 w w w w
w0e0e0e0e0e0e0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0e0w0 w w w w
w0e0w0w0e0e0w0w0e0w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0e0w0 w w w w w w w w
w0e0e0e0e0e0e0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0e0w0 w w w w
w0e0e0e0e0e0e0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0e0w0 w w w w
w0e0e0e0e0e0e0e0e0w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0e0w0 w w w w
w0e0w0w0e0e0w0w0e0w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0e0w0 w w w w w w w w
w0e0e0e0e0e0e0e0e0w0e0e0e0w0w0w0e0e0w0w0w0e0e0e0e0w0e0e0e0w0 w w w w w w w w w w
w0w0w0w0w0w0w0w0w0w0e0e0e0w0w0w0e0e0w0w0w0e0e0e0e0w0e0e0w0w0 w w w w w w w w w w w w w w w w w w w
w0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0e0e0e0e0w0e0e0e0e0e0e0e0e0w0 w w w w
w0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0e0e0e0e0w0e0e0e0e0e0e0e0e0w0 w w w w
w0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0w0w0e0e0w0e0e0e0e0e0e0e0e0w0 w w w w w w
w0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0w0w0e0e0w0e0e0e0e0e0e0e0e0w0 w w w w w w
w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0x2e0e0e0e0e0w0 w w x2 w
w0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0e0e0e0e0e0e0w0 w w w
w0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0e0e0e0e0w0e0e0e0e0e0e0e0e0w0 w w w w
w0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0e0e0w0e0w0e0e0e0e0e0e0e0e0w0 w w w w w
w0e0e0e0e0e0e0e0e0e0e0e0e0w0e0e0e0e0e0e0w0e0e0e0e0e0e0e0e0w0 w w w w
w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0w0 w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w
</layout> </layout>
<exit id="2" location="23, 22" destination="testing/test1.xml" name="upstairs"/> <exit id="2" location="23, 22" destination="testing/test1.xml" name="upstairs"/>
</map> </map>