我想为自己写一个简单的地图生成器,我不知道怎么咬。字段将不得不抽签六角形。
当我生成随机图块时,我必须注意邻居。那我还要考虑已经有两个邻居等等递归?我确定田地可能是水、土、山——但在一个田地中可能是从水到陆地的过渡,其中一侧。
一个数组将包含一个指定图块类型的数字。我想用 python 来做 - 学习。
请给点建议。
我想为自己写一个简单的地图生成器,我不知道怎么咬。字段将不得不抽签六角形。
当我生成随机图块时,我必须注意邻居。那我还要考虑已经有两个邻居等等递归?我确定田地可能是水、土、山——但在一个田地中可能是从水到陆地的过渡,其中一侧。
一个数组将包含一个指定图块类型的数字。我想用 python 来做 - 学习。
请给点建议。
很多很多年前,我实现了一些 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
当然,您必须注意地图边缘。
可能不需要使用递归。由于您将此作为学习练习,因此我只会为您提供如何进步的大纲。
六边形网格需要一个坐标系,用于行和列。
创建一个函数neighbours
,给定一个图块的坐标 x,y,返回该图块的所有邻居。
使用您的坐标系循环遍历所有图块。对于每个图块,检索其邻居。如果邻居没有类型可以忽略它,否则,根据其邻居的字符确定图块的字符。
我认为最重要的是在地图上标出你的六边形,以便于检查邻居......
一个明智的选择是使用二维元组,这样六边形 (1,1) 的 6 个邻居是 (1,0),(2,0),(2,2),(1,2),(0 ,2) 和 (1,1) - 从北/上开始顺时针方向。
要填充地图,您可以迭代所有方块,从一组允许的图块中随机选择一个(基于它的当前邻居)。