2

I've been recently looking to make procedurally generated terrain for games. I saw that Perlin noise was useful for this, and so I gave it a shot. So far, the terrain is generated beautifully. However, whenever I run the program multiple times, the terrain is the exact same. Is there any way to randomize the Perlin noise that's generated?

Code:

from opensimplex import OpenSimplex
import random
from time import time

height = 40
width = height
scale = height / 10

value = [[0 for x in range(width)] for y in range(height)]

gen = OpenSimplex()
def noise(nx, ny):
    # Rescale from -1.0:+1.0 to 0.0:1.0
    return gen.noise2d(nx, ny) / 2.0 + 0.5

def printBiome(y, x):
  if value[y][x] <= 2:
    print('O', end = " ")
  elif value[y][x] >= 8:
    print('M', end = " ")
  else:
    print('L', end = " ")

for y in range(height):
    for x in range(width):
        nx = x/width - 0.5
        ny = y/height - 0.5
        value[y][x] = 10 * noise(1 * scale * nx, 1 * scale * ny) +  0.5 * noise(2 * scale * nx, 2 * scale* ny) + 0.25 * noise(4 * scale * nx, 4 * scale * ny)

for y in range(height):
    for x in range(width):
        printBiome(y, x)
    print()
Keto Z
  • 49
  • 7

1 Answers1

2

The OpenSimplex class defaults to using seed=0. To generate a different terrain, input a different seed value:

import uuid
# http://stackoverflow.com/a/3530326/190597
seed = uuid.uuid1().int>>64
gen = OpenSimplex(seed=seed)
unutbu
  • 777,569
  • 165
  • 1,697
  • 1,613