行和列之间的终端间距

Terminal spacing between rows and column

我正在尝试用 C 创建蛇终端游戏。我正在使用 ncurses 从箭头键获取输入。

我正在绘制一个带有空白的简单边框,以获得蛇的 "map"。

void draw(){
    for(int i = 0; i < cols; i++){
        for(int j = 0; j < rows; j++){
            if(i == 0 || i == cols-1 || j == 0 || j == rows-1)
                mvaddch(i,j,'#');
            else
                mvaddch(i,j,' ');
        }
    }
    refresh();
}

我遇到的问题是,列和行之间的间距不同。
rows 和 cols 都初始化为 20 的值。所以我认为它应该是一个正方形。如果我移动 up/down 或 right/left,移动速度也会改变。

此问题发生在 terminal.app 和 iterm2 中。无论如何改变它匹配的间距?

如果基本非正方形"tiles"的纵横使用相同的数字,则结果将是非正方形。速度也一样,如果你每秒水平和垂直移动相同的步数,但每一步的长度不同,因为它是非正方形瓷砖的宽度和高度,那么感知速度将是不同。

请注意,横向两个字符的宽度比一个字符的宽度更接近纵向一个字符的高度。

所以,而不是例如表示这种情况(带蛇的正方形),水平字符数与垂直字符数相同

##########
#        #
#  ooO   #
#  o     #
#  o     #
#  o     #
#  o     #
#        #
#        #
##########

针对相同的情况试试这个,即在每个非空白字符后插入一个水平空白,导致水平字符数是垂直字符数的两倍。它们的高度比宽度长得多,而且大多数可打印字符的上半部分大部分是空的这一事实导致了一个均匀的、更方形的印象。

# # # # # # # # # #
#                 #
#     o o O       #
#     o           #
#     o           #
#     o           #
#     o           #
#                 #
#                 #
# # # # # # # # # #

这样你会得到更方形的印象,并且水平和垂直速度也会保持一致。

如果您不喜欢垂直方向不可避免而水平方向有意的间隙,那么正常的终端环境不适合您的游戏,您需要更改为允许像素精确控制的图形环境结果。