ncurses 中的六角网格
Hex grid in ncurses
我想写一个使用六边形而不是方形的 roguelike 游戏。 (十六进制与其所有邻居的距离相等。)有没有办法在 ncurses 中安排这个?实际上,只需要将 pad 中的每个奇数行偏移字符宽度的 1/2。
我更喜欢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
并每隔一行移动一个 space.
代码中(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 库。
我想写一个使用六边形而不是方形的 roguelike 游戏。 (十六进制与其所有邻居的距离相等。)有没有办法在 ncurses 中安排这个?实际上,只需要将 pad 中的每个奇数行偏移字符宽度的 1/2。
我更喜欢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
并每隔一行移动一个 space.
代码中(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 库。