feat: prototype level loading and world stepping
This commit is contained in:
1 parent
a7cedad3b7
commit
ed564f1e37
3 files changed
+374
No files matched your search
@@ -0,0 +1,84 @@
|
||||
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)
|
||||
Reference in new issue
Block a user