def getCavernTileMap(self): TileMap = [] #chance = 0.6 map, caverns = CellularAutomata.generateMap(self.cellwidth, self.cellheight, chance=0.6, steps=6, birthLimit=3, deathLimit=4) for rows in range(0, len(map)): row = [] for columns in range(0, len(map[0])): if not map[rows][columns]: row.append( Tiles.Tile((columns, rows), self.tileSheet.returnTile(0, 0), False)) else: #row.append(Tiles.AnimTile((columns,rows), self.animTileSheet,True,0,3,10)) row.append( Tiles.Tile((columns, rows), self.tileSheet.returnTile(2, 0), True)) TileMap.append(row) #Adds the tile that goes to next level EndLocation = choice(caverns[-2]) TileMap[EndLocation[0]][EndLocation[1]] = Tiles.LevelTile( (EndLocation[1], EndLocation[0]), self.tileSheet.returnTile(3, 0), False) return TileMap, caverns
def generateCellularAutomata(width: int = 40, height: int = 30, chance: float = 0.65, steps: int = 2, birthLimit: int = 3, deathLimit: int = 4) -> list: '''Returns a tilemap from the CellularAutomata method''' arr, caverns = CellularAutomata.driver(width, height, chance, steps, birthLimit, deathLimit) tileMap = [] # Iterates over the 2D list returned by the cellauto algorithm # and places a non collidable tile at a true value, and a collidable # tile at the false values for y in range(0, len(arr)): row = [] for x in range(0, len(arr[0])): if arr[y][x] == True: row.append( Tiles.Tile(gridPos=(x, y), collision=False, sprite=spritesheet.returnSprite(0, 0))) elif arr[y][x] == False: row.append( Tiles.Tile(gridPos=(x, y), collision=True, sprite=spritesheet.returnSprite(1, 0))) ''' elif arr[y][x] == 'corridoor': row.append(Tiles.Tile(gridPos=(x, y), collision=False, sprite=spritesheet.returnSprite(0, 2))) ''' tileMap.append(row) y, x = choice(caverns[-1]) tileMap[y][x] = Tiles.LevelTile(gridPos=(x, y), sprite=spritesheet.returnSprite(0, 2)) return tileMap, caverns