Beste Weg, um eine Dreieckige/Hexagonal Grid in Python

Mache ich ein Spiel mit sechseckigen Fliesen, und haben beschlossen, mit einem dreieckigen/hexagonal grid. Ich fand diese Frage, die mir geholfen generieren-Koordinaten und leicht modifiziert den code zum speichern der Koordinaten als Schlüssel in einem dictionary mit Werten von entweder "." (Boden) oder "X" (Wand) und enthalten eine Funktion druckt eine string-Darstellung der Karte, wo jede nicht-leere Zeichen repräsentiert eine sechseckige Fliese. Dies ist der neue 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.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)

Mit diesem code kann ich erzeugen, die Koordinaten innerhalb des radius wie folgt:

import hexgrid
hg = hexgrid.HexGrid(radius)

sowie Zugang zu einer Koordinate so:

hg.tiles[a,b,c]

Dies scheint zu funktionieren für jetzt, aber ich bin sicher, es muss einige Nachteile zu speichern, die Karte auf diese Weise. Wenn es keine Nachteile, könnte Sie bitte zeigen Sie Sie aus, und vielleicht präsentieren Sie einen besseren Weg, um zu speichern der Karte? Vielen Dank für Ihre Zeit.

  • Was sind a, b und c? Ist das in 3D?
Schreibe einen Kommentar