如何编写自己的地图生成器?

时间:2012-09-19 09:50:40

标签: python

我想为自己写一个简单的地图生成器,我不知道如何咬人。字段必须绘制六边形。

当我生成随机区块时,我必须注意邻居。然后我必须考虑已经两个邻居,等等递归?我确定这个地方可能是水,地球,山脉 - 但是在一个地方可能是从一个地方到另一个地方的过渡。

数组将包含一个指定tile类型的数字。 我想在python中实现它 - 用于学习。

请一些建议。

3 个答案:

答案 0 :(得分:0)

可能不需要使用递归。由于您将此作为学习练习,我将仅向您提供如何进展的概述。

六角形网格需要一个坐标系,用于行和列。

创建一个函数neighbours,给定块的坐标x,y返回该块的所有邻居。

使用坐标系循环遍历所有切片。对于每个图块,检索其邻居。如果邻居没有类型,您可以忽略它,否则,根据其邻居的字符确定一个瓦片的字符。

答案 1 :(得分:0)

我认为最重要的是在地图上表示你的六边形,这样可以轻松地检查邻居......

一个明智的选择可能是使用2D元组,因此六边形(1,1)的6个邻居是(1,0),(2,0),(2,2),(1,2) ,(0,2)和(1,1) - 从北/上开始顺时针方向。

要填充地图,您可以迭代所有正方形,从可允许的图块集中选择一个随机选择(基于它的当前邻居)。

答案 2 :(得分:0)

很多年前我实现了一些hexmap例程。我不完全记得细节,但是我使用了一个坐标系,使得每一行从下一个偏移1。

像这样:

00  01  02  03  04  05  06  07
  10  11  12  13  14  15  16  17
20  21  22  23  24  25  26  27
  30  31  32  33  34  35  36  37

那么你可以通过将这些偏移应用到十六进制自己的坐标(从上面和左边的十六进制开始,顺时针方向)来找到十六进制邻居的坐标:

-1,-1  -1,0  0,1  1,0  1,-1  0,-1

所以hex 24的邻居是: 13,14,25,34,33,24

当然,您必须了解地图边缘。