使用ESC序列在终端中移动光标

时间:2018-05-03 14:53:21

标签: c++ linux terminal

我正在写一个棋盘游戏,我必须在屏幕上打印一些卡片。我在每个班级都有几个卡片和方法print_card()的课程。 卡片的输出应该像这样:
| S D |
或在广场上的其他词语。

void ShipCard::print_card() {
    std::cout << "|SHP|\033[5D\033[1E|" << pirates_cnt << "  |\033[1A"; }

我使用ESC序列来移动光标。问题在于,当我尝试逐个打印多张卡片时,下一张卡片打印在上一张卡片的位置,尽管我将光标移回顶部。 但是,如果我打印一些文本而不是卡片,它会正常工作。

为什么它不能正常工作?是否有可能只使用ESC序列,没有像ncurses这样的东西?

例如,如果我使用

std::cout << "|A B|\033[5D\033[1E|" << "C D|\033[1A";  

之后:

std::cout << "|M N|\033[5D\033[1E|" << "O P|\033[1A";  

我明白了:

| A B |
| O P |

而不是:

| A B || M N |
| C D || O P |

0 个答案:

没有答案