2016-10-14 90 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和多個類和實例一樣工作。有沒有其他方法? –

相關問題