<p>对于地形生成,大多数算法都使用某种<a href="https://en.wikipedia.org/wiki/Perlin_noise" rel="nofollow noreferrer">Perlin noise</a>。在</p>
<p>在Python中,实现已经存在。您可以检查caseman的实现<a href="https://github.com/caseman/noise" rel="nofollow noreferrer">on GitHub</a>或{a3}。这个软件包有麻省理工学院的许可证,这意味着你可以不受任何限制地使用它。如果您需要其他类型的噪声,我已经用Python实现了一些噪声生成器,您可以找到<a href="https://github.com/Nyrio/command_line_tools/tree/master/math/noise" rel="nofollow noreferrer">on my own GitHub</a>。在</p>
<hr/>
<p>编辑:下面是一个如何使用该模块的示例:</p>
<pre><code>import noise
def neighbors(terrain, i, j, L, C):
possible_neigbors = [(i+di, j+dj) for di in [-1, 0, 1] for dj in [-1, 0, 1]]
return [terrain[i2][j2] for (i2, j2) in possible_neigbors
if i2 >= 0 and j2 >= 0 and i2 < L and j2 < C]
def generate_terrain(L, C):
noisegrid = [[noise.pnoise2(j/C, i/L) for j in range(C)] for i in range(L)]
terrain = [[int(noisegrid[i][j] > 0.12) for j in range(C)] for i in range(L)]
for i in range(L):
for j in range(C):
if terrain[i][j] == 0:
nb = neighbors(terrain, i, j, L, C)
if 1 in nb:
terrain[i][j] = 2
return terrain
terrain = generate_terrain(6, 20)
</code></pre>
<p>当我运行这段代码时,它生成了:</p>
^{pr2}$
<p>对于地形形状的更多控制,或者从一次执行到另一次执行的随机性,请阅读模块代码中的注释。在</p>