Гексагональные плитки и поиск их соседей

Я разрабатываю простую двухмерную настольную игру, используя карты шестиугольных плиток, я прочитал несколько статей (включая Gamedev, которые связываются каждый раз, когда возникает вопрос о шестиугольных плитках) о том, как рисовать гексы на экране и как управлять движением (хотя многое из этого я уже делал раньше). Моя основная проблема - найти соседние плитки по заданному радиусу.

Вот как работает моя система карт:

(0,0) (0,1) (0,2) (0,3) (0,4)
   (1,0) (1,1) (1,2) (1,3) (1,4)
(2,0) (2,1) (2,2) (2,3) (2,4)
   (3,0) (3,1) (3,2) (3,3) (3,4)

и т. Д.

What I ' m борюсь с тем фактом, что я не могу просто «выбрать» соседние плитки, используя для (x-range; x + range; x ++); for (y-range; y + range; y ++); , потому что он выбирает ненужные плитки (в приведенном мною примере выбор плитки (1,1) и указание диапазона 1 также даст мне (3, 0) (те, которые мне действительно нужны, это (0,1) (0,2) (1,0) (1,2) (2,1) (2,2)), которая как бы примыкает к плитке ( из-за того, как структурирован массив), но на самом деле это не то, что я хочу выбирать. Я мог бы просто перебрать его, но это было бы некрасиво и, вероятно, не охватило бы все аспекты «выбора радиуса».

Может ли кто-нибудь указать мне правильное направление?

14
задан Rodia 16 June 2018 в 05:42
поделиться