2016-10-14 64 views
0

我在windows上使用了<windows.h><conio.h>这种东西,但是在unix上,我能找到的唯一东西是<ncurses.h>,它使用了很多C并且不支持很多C++函数。如何将控制台光标移动到(x,y),同时还能够执行面向对象的编程?如何将控制台光标移动到unix上的(x,y)?

编辑:我想在C++中使用控制台作为显示来制作简单的游戏。我知道这样做并不理想,但这是针对不能使用Visual C++或任何其他图形的项目。想想像蛇或扫雷。我需要能够在不同位置cout,而无需更新过程中的整个屏幕。它需要与unix系统兼容。

回答

1

一个非常简单的方法是通过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>[,COLH(转义字符是ASCII 27或八进制'\033')执行绝对光标定位。在大多数常见的终端上,应该在左上角放置一个“X”,在第13列第8行放置第二个(计数基于1)。

编辑:hvd的评论当然是spot-on:这很简单,但是ncurses是一个复杂的原因。与普通的转义代码相比,它可以确保工作更可靠,而且工作范围更广泛。根据你实际想要达到什么,我同意hvd,你应该非常小心,然后再选择这个简单的黑客作为你的问题的解决方案。

+1

所以它比诅咒的可读性差,不如诅咒可移植,并且与诅咒同样非面向对象。我不会建议OP去这个。 – hvd

+0

@ hvd我同意。也许我应该写这个。 – mindriot

+0

我不认为这会对我有用。我需要它像cout,文件I/O和多个类和实例一样工作。有没有其他方法? –

相关问题