【问题标题】:Terminal spacing between rows and column行和列之间的终端间距
【发布时间】:2020-05-19 14:07:39
【问题描述】:

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

我正在绘制一个带有空白的简单边框,以获取蛇的“地图”。

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();
}

我遇到的问题是,列和行之间的间距不同。
行和列都初始化为20。所以我认为它应该是一个正方形。如果我向上/向下或向右/向左移动,移动速度也会发生变化。

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

【问题讨论】:

  • 水平打印两个“##”而不是一个。这改善了间距。如果这还不够好,那么终端就不是你的环境。
  • 好的,谢谢。那是一种无赖,因为那对我来说还不够好。如果我向上/向下或向右/向左移动,移动速度也会发生变化。
  • 速度将与间距对齐。你的蛇也只需水平使用两个字符。
  • 或者在这两种情况下,水平一个字符和一个空格都会给人一种更流畅的印象。
  • 建议(使用curses)打开一个用户窗口。然后通过像素而不是字符来导航。

标签: c macos unix ncurses


【解决方案1】:

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

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

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

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

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

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

这样您会获得更加方正的印象,并且水平和垂直速度也保持一致。

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

【讨论】:

  • 我认为你答案的最后一点是正确的。看来终端不适合我。我想我会切换到图形环境。
猜你喜欢
  • 1970-01-01
  • 2022-08-10
  • 1970-01-01
  • 1970-01-01
  • 2021-03-19
  • 2017-03-09
  • 2017-11-09
  • 2013-03-17
  • 2016-07-23
相关资源
最近更新 更多