如何在 pygame 中生成柏林噪声?

How to generate perlin noise in pygame?

我正在尝试制作一款生存游戏,但我遇到了柏林噪音问题。我的程序给了我这个:

但我想要岛屿或河流之类的东西。

这是我的代码:

#SetUp#
import pygame, sys, random
pygame.init()
win = pygame.display.set_mode((800, 600))
pygame.display.set_caption('Isom')
x = 0
y = 0
s = 0
tilel = list()
random.seed(5843)
MAP = [random.randint(0, 1) for _ in range(192)]

#Tiles#
class tile():
    grass = pygame.image.load('Sprites/Images/Grass.png')
    water = pygame.image.load('Sprites/Images/Water.png')

#Loop#
while True:
    for key in pygame.event.get():
        if key.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    #World#
    for a in range(12):
        for b in range(16):
            if MAP[s] == 0:
                win.blit((tile.grass), (x, y))
            elif MAP[s] == 1:
                win.blit((tile.water), (x, y))
            x += 50
            s += 1
        x = 0
        y += 50
    x = 0
    y = 0
    s = 0
    #Update#
    pygame.display.update()

我建议安装 noise 软件包。
然后对一维柏林噪声使用noise.pnoise1(x),对二维柏林噪声使用noise.pnoise2(x, y),对三维柏林噪声使用noise.pnoise3(x, y, z)

首先,批判性思维:Perlin 是一个流行的术语,但实际的“Perlin”噪声算法是旧的并且明显是方形对齐的。作为一般规则,最好使用单纯形噪声。

我建议PyFastNoiseLite:https://github.com/tizilogic/PyFastNoiseLite Follow the install instructions, then mirror the C++ example in the FastNoiseLite documentation here: https://github.com/Auburn/FastNoiseLite/tree/master/Cpp一定要注意它的内部倍频,你可以用SetFrequency(f)

改变

您还可以使用 Python 噪音库来处理单纯型噪音,噪音 snoise2(x, y) 但如果您想使用 snoise3(x, y, z) 我会首先考虑这里的信息:https://www.reddit.com/r/proceduralgeneration/comments/qr6snt/countdown_timer_simplex_patent_expiration/