私は六角形のタイルでゲームを作っていますが、三角形/六角形のグリッドを使用することにしました。座標を生成するのに役立つこの質問を見つけ、コードをわずかに変更して、すべての座標を「。」の値を持つディクショナリにキーとして保存しました。(床) または "X" (壁) であり、空白以外の各文字が六角形のタイルを表すマップの文字列表現を出力する関数が含まれていました。これは新しいコードです:
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.append([])
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)
このコードを使用すると、次のように半径内のすべての座標を生成できます。
import hexgrid
hg = hexgrid.HexGrid(radius)
次のような座標にアクセスします。
hg.tiles[a,b,c]
これは今のところ問題なく動作しているように見えますが、この方法でマップを保存することにはいくつかの欠点があるに違いないと確信しています。欠点がある場合は、それらを指摘してください。また、マップを保存するためのより良い方法を提示してください。お時間をいただきありがとうございます。