''' Cellular Automaton-based terrain generation adapted from: https://codewithgolu.com/python/procedural-generation-of-game-content-with-python-a-comprehensive-guide/ Produces goo like this: ################### ####### ###### ########### ########### ###### ### ####### > ####################### ####### # ###### ################### #### ####### ############# > ############################### ### ####### ################## ## ###### ############### > ################# ########### #### ######## ################ ## #### #### ########## > ##### #### ### ######## ####### ######### ############# ## ## ### ######### > #### ####### ################### ########### #### #### ####### > ### ####### #################### ########## ###### ## ##### ###### > ## ######## ########### #### ##### ##### #### ###### ##### > #################### ### #### #### ###### ######## #### > ### #################### ### #### ### ######### ############ #### > ##### ################### ### #### ## ########### ############# #### > ###### #################### ### #### ### ############# ############## #########> ############ #################### ### ###### #### ############################### ########> ################ ######### ####### #### ###### ##### ############################### #######> ################ ####### ###### #### #### ##### ############################### #######> ##### ###### ###### ##### #### #### ####################### #### ######> ## #### #### #### ##### #### ############ ######## ### #> ### ## ###### #### ##### ##### #### ### > ### ## ###### ## ## #### ### ## #### > ## #### ## ##### #### ## ##### #### #### #### ###### #> #### ###################### ### #### ###### ### ############# #########> ################################## #### #### ##### ## ############## ########> ''' import random # Set the size of the terrain w, h = size = (256, 256) # Set the initial terrain state to random values terrain = [[random.randint(0, 1) for _ in range(w)] for _ in range(h)] # Define the cellular automata rules def cellular_automata_step(terrain): new_terrain = [[0] * w for _ in range(h)] for x in range(1, w - 1): for y in range(1, h - 1): if sum(neighbors(terrain, x, y)) >= 5: new_terrain[y][x] = 1 return new_terrain def neighbors(terrain, x, y): for i in range(y - 1, y + 2): for j in range(x - 1, x + 2): try: n = terrain[i][j] except IndexError: continue yield n # Apply the cellular automata rules for i in range(10): terrain = cellular_automata_step(terrain) for row in terrain: print(''.join(' #'[n] for n in row)