回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在制作一个六角形的游戏,并决定使用三角形/六角形网格。我找到了帮助我生成坐标的<a href="https://stackoverflow.com/questions/2049196/generating-triangular-hexagonal-coordinates-xyz">this</a>问题,并稍微修改了代码,将所有坐标作为键存储在一个值为“.”(floor)或“X”(wall)的字典中,还包含了一个函数,该函数打印出一个表示地图的字符串,其中每个非空字符表示一个六边形平铺。这是新代码:</p>
<pre><code>deltas = [[1,0,-1],[0,1,-1],[-1,1,0],[-1,0,1],[0,-1,1],[1,-1,0]]
class HexGrid():
def __init__(self, radius):
self.radius = radius
self.tiles = {(0, 0, 0): "X"}
for r in range(radius):
a = 0
b = -r
c = +r
for j in range(6):
num_of_hexas_in_edge = r
for i in range(num_of_hexas_in_edge):
a = a+deltas[j][0]
b = b+deltas[j][1]
c = c+deltas[j][2]
self.tiles[a,b,c] = "X"
def show(self):
l = []
for y in range(20):
l.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>([])
for x in range(60):
l[y].append(".")
for (a,b,c), tile in self.tiles.iteritems():
l[self.radius-1-b][a-c+(2*(self.radius-1))] = self.tiles[a,b,c]
mapString = ""
for y in range(len(l)):
for x in range(len(l[y])):
mapString += l[y][x]
mapString += "\n"
print(mapString)
</code></pre>
<p>使用此代码,我可以生成半径内的所有坐标,如下所示:</p>
<pre><code>import hexgrid
hg = hexgrid.HexGrid(radius)
</code></pre>
<p>访问这样的坐标:</p>
<pre><code>hg.tiles[a,b,c]
</code></pre>
<p>目前看来,这样做还不错,但我相信这样存储地图肯定有一些缺点。如果有什么缺点的话,你能指出它们吗?也许能提出一个更好的方法来保存地图?非常感谢你的时间。</p>