Я собираюсь написать игру в стиле roguelike, которая использует гексагональные плитки, а не квадратные. (Гекс равноудален от всех своих соседей.) Есть ли способ организовать это в ncurses? Действительно, необходимо только сместить каждую нечетную строку в пэде на половину ширины символа.
Я предпочитаю python, но я знаю и c ++. Отметьте этот вопрос как оба, если последнее необходимо.
Вы можете подобраться к нему.
__ __ __ __
/ \__/ \__/ \__/ \
\__/ \__/ \__/ \__/
/ \__/ \__/ \__/ \
\__/ \__/ \__/ \__/
/ \__/ \__/ \__/ \
\__/ \__/ \__/ \__/
Терминальные клетки имеют тенденцию быть близкими к соотношению 2/1; умножением X
на 4, Y
на 2 и сдвигая каждую вторую строку на два символа, вы получаете достаточно близко к гексагональной сетке.
x x x x x x x
x x x x x x
\ /
x x x --x-- x x x
/ \
x x x x x x
x x x x x x x
Вы также можете построить более тонкую сетку с
x x x x x x x x x x x x x
x x x x x o o x x x x x
x x x x x o + o x x x x x
x x x x x o o x x x x x
x x x x x x x x x x x x x
т.е. двойной X
и сдвиньте каждую другую строку на один пробел.
В коде (Python):
def screen_pos(i, j):
return i*2 + (j & 1), j
def neighbors(i, j):
h = 1 - (j & 1)
return [(i-1, j), (i+1, j),
(i-h, j-1), (i-h, j+1),
(i-h+1, j-1), (i-h+1, j+1)]
Взгляните на rhex: https://github.com/dpc/rhex , это в Rust, но должно дать вам базовое представление о том, как это может работать. Он использует библиотеку hex2d-rs.