我在Windows上使用了<windows.h>
和<conio.h>
来做这种事情,但是在unix上我唯一能找到的是<ncurses.h>
,它使用了大量的C并且没有&# 39; t支持很多C ++函数。如何将控制台光标移动到(x,y),同时还能够进行面向对象的编程?
编辑:我尝试使用控制台作为显示器在C ++中制作简单游戏。我知道这样做并不理想,但这适用于不能使用Visual C ++或任何其他图形的项目。想想像蛇或扫雷一样的东西。我需要能够cout
在不同的位置,而不需要在整个过程中更新整个屏幕。它需要与unix系统兼容。
答案 0 :(得分:2)
一种非常简单的方法是通过ANSI escape codes:
#include <iostream>
void moveCursor(std::ostream& os, int col, int row)
{
os << "\033[" << col << ";" << row << "H";
}
int main()
{
moveCursor(std::cout, 1,1);
std::cout << "X (1,1)";
moveCursor(std::cout, 13,8);
std::cout << "X (13,8)" << std::endl;
return 0;
}
序列<ESC>[
行 ,
col H
(转义字符为ASCII 27或八进制'\033'
)执行绝对光标定位。在大多数常见的终端上,这应该放置一个&#34; X&#34;在左上角,第13列第8行,第8行(计数从1开始)。
编辑:hvd的评论当然是正确的:这很简单,但ncurses很复杂是有原因的。与普通的转义码相比,它可以保证在更广泛的设置中更可靠地工作。根据你真正想要实现的目标,我同意hvd你应该非常小心,然后选择这个简单的黑客作为解决问题的方法。