c - 行与列之间的端子间距

标签 c macos unix ncurses

我正在尝试用 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。所以我认为它应该是一个正方形。如果我向上/向下或向右/向左移动,移动速度也会改变。

此问题发生在terminal.app 和iterm2 中。有没有办法改变它匹配的间距?

enter image description here

最佳答案

如果您在垂直和水平方向上使用相同数量的基本非方形“图 block ”,那么结果将是非方形的。这同样适用于速度,如果你每秒水平和垂直移动相同的步数,但步长不同,因为它是非方形瓷砖的宽度和高度,那么感知的速度将是不同。

请注意,两个字符的水平宽度比一个字符的宽度更接近一个字符的垂直高度。

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

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

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

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

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

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

关于c - 行与列之间的端子间距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60045657/

相关文章:

c - 使用 malloc/struct 的段错误

c++ - 如何防止pcre(C库)在一个字符串失败时继续匹配?

ios - 根据启动参数定义快速类型别名

json - 在文件开头和结尾添加括号 (JSON)

c - 将数字读入数组并在 C 中反向打印

os x更新后Mysql表名小写

git - Mac - 从 Git 终端删除大于 '>'

linux - 如何删除作为根参数传递的文件?

c - 后台进程在终止前捕获进程 ID

c++ - 原始套接字 fd 的 setsockopt() 失败