Zuerst einmal - ich weiß, dass ich hier sehr dicht bin.
Damit versuche ich, eine C # -Implementierung dieses Algorithmus zu schreiben:
var results = []
for each -N ≤ dx ≤ N:
for each max(-N, -dx-N) ≤ dy ≤ min(N, -dx+N):
var dz = -dx-dy
results.append(cube_add(center, Cube(dx, dy, dz)))
Ich habe dies aus dieser enormen Ressource genommen.
Mein Problem ist, dass jede Implementierung, die ich bisher ausprobiert habe, verrückte Ergebnisse erzielt hat. Der unten gezeigte Code führt derzeit beispielsweise dazu:
und das:
Mein Code sieht derzeit so aus:
for (int x = this.CellPositionX - distance; x <= this.CellPositionX + distance; x++)
{
for (int y = this.CellPositionY - Math.Max(-distance, -x - distance); y <= this.CellPositionY + Math.Min(distance, -x + distance); y++)
{
HexPosition rangePosition = new HexPosition(x, y);
range.Add(rangePosition);
}
}
Kann hier jemand etwas Falsches erkennen? Alle Vorschläge sind willkommen. Ich habe jetzt schon eine Weile meinen Kopf darauf geschlagen.
Vielen Dank!
Aktualisierter Hinweis: Ich verwende Axialkoordinaten im Raster. Update Nr. 2: Wie unten erwähnt, hatte ich meine for..each-Schleife falsch und verwendete keine Deltas für das Training. Danke für die Hilfe!
Ich habe derzeit ein Problem wie unten gezeigt mit der Implementierung aus den Antworten:
Ich werde weiter nachforschen - wenn ich es herausfinde, werde ich die vollständigen Ergebnisse hier veröffentlichen. Vielen Dank an alle!