Питон — шестнадцатеричная сетка в ncurses

Я собираюсь написать игру в стиле roguelike, которая использует гексагональные плитки, а не квадратные. (Гекс равноудален от всех своих соседей.) Есть ли способ организовать это в ncurses? Действительно, необходимо только сместить каждую нечетную строку в пэде на половину ширины символа.

Я предпочитаю python, но я знаю и c ++. Отметьте этот вопрос как оба, если последнее необходимо.

1

Решение

Вы можете подобраться к нему.

 __    __    __    __
/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/
/  \__/  \__/  \__/  \
\__/  \__/  \__/  \__/

Терминальные клетки имеют тенденцию быть близкими к соотношению 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)]
3

Другие решения

Взгляните на rhex: https://github.com/dpc/rhex , это в Rust, но должно дать вам базовое представление о том, как это может работать. Он использует библиотеку hex2d-rs.

0

По вопросам рекламы [email protected]