Ncurses中的十六进制网格

Hex grid in ncurses

本文关键字:网格 十六进制 Ncurses      更新时间:2023-10-16

我想编写一个使用六角形瓷砖而不是方形的游戏。(十六进制与所有邻居的等距。)是否有办法在ncurses中安排这一点?确实,只需要将垫子中的每条奇数线偏移到角色宽度的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并将其他所有线路移动一个空间。

代码(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库。