85 lines
2.5 KiB
Python
85 lines
2.5 KiB
Python
from .constants import tileSize
|
|
|
|
tileChars = {
|
|
"X": "ground",
|
|
"#": "brick",
|
|
"=": "platform",
|
|
"L": "pipeTL",
|
|
"R": "pipeTR",
|
|
"l": "pipeBL",
|
|
"r": "pipeBR",
|
|
}
|
|
|
|
entityChars = {"p", "g", "o"}
|
|
|
|
mainMap = [
|
|
" ",
|
|
" ",
|
|
" o o o ",
|
|
" o o o ",
|
|
" o o ",
|
|
" o o o o o L R o o ",
|
|
" #### === l r ===== ",
|
|
" === ",
|
|
" p ##### l r g g ",
|
|
" L R l r ",
|
|
" g l r g ",
|
|
" l r ",
|
|
"XXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX",
|
|
"XXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX",
|
|
]
|
|
|
|
|
|
class Level:
|
|
def __init__(self, tiles, playerSpawn, enemySpawns, coinSpawns):
|
|
self.tiles = tiles
|
|
self.rows = len(tiles)
|
|
self.cols = len(tiles[0])
|
|
self.playerSpawn = playerSpawn
|
|
self.enemySpawns = enemySpawns
|
|
self.coinSpawns = coinSpawns
|
|
|
|
def pixelWidth(self):
|
|
return self.cols * tileSize
|
|
|
|
def pixelHeight(self):
|
|
return self.rows * tileSize
|
|
|
|
|
|
def parseAscii(rows):
|
|
width = max(len(row) for row in rows)
|
|
padded = [row.ljust(width) for row in rows]
|
|
tiles = [["air"] * width for _ in padded]
|
|
playerSpawn = None
|
|
enemySpawns = []
|
|
coinSpawns = []
|
|
for y, row in enumerate(padded):
|
|
for x, char in enumerate(row):
|
|
if char in tileChars:
|
|
tiles[y][x] = tileChars[char]
|
|
elif char == "p":
|
|
playerSpawn = (x * tileSize, y * tileSize)
|
|
elif char == "g":
|
|
enemySpawns.append((x * tileSize, y * tileSize))
|
|
elif char == "o":
|
|
coinSpawns.append((x * tileSize, y * tileSize))
|
|
return Level(tiles, playerSpawn, enemySpawns, coinSpawns)
|
|
|
|
|
|
def buildLevel():
|
|
return parseAscii(mainMap)
|
|
|
|
|
|
testMap = [
|
|
" ",
|
|
" ",
|
|
" X ",
|
|
" p X ",
|
|
" X ",
|
|
"XXXXXXXXXX",
|
|
]
|
|
|
|
|
|
def buildTestLevel():
|
|
return parseAscii(testMap)
|