2014-06-18 4 views
1
#include <iostream> 
using namespace std; 

int board[10][10] = {{0,1,0,0,0,1,1,0,0,0}, 
        {0,0,0,0,0,1,1,1,0,0}, 
        {0,0,1,0,0,1,0,1,0,1}, 
        {0,1,0,0,0,1,1,0,0,0}, 
        {0,0,0,0,0,0,0,0,0,0}, 
        {0,1,0,0,0,1,1,0,0,0}, 
        {0,0,0,0,0,1,1,1,0,0}, 
        {0,0,1,0,0,1,0,1,0,1}, 
        {0,1,0,0,0,1,1,0,0,0}, 
        {0,0,0,0,0,0,0,0,0,0}}; 

void PrintBoard() 
{ 
    for(int i = 0; i < 10; i++) 
    { 
     for(int j = 0; j < 10; j++) 
     { 
      if(board[i][j] == 1) 
      { 
       cout << '*'; 
      } 
      else 
      { 
       cout << '-'; 
      } 
     } 
     cout << endl; 
    } 
} 

int main() 
{ 
    bool done = false; 
    while(!done) 
    { 
     done = false; 
     PrintBoard(); 
     int i = 0; 
     i++; 
     cout << i; 
    } 
} 

내 문제는 보드를 콘솔의 동일한 위치에 인쇄하고 있습니다. 이렇게하면 수백 개의 보드가 콘솔의 한 줄에 아래쪽으로 인쇄됩니다. 미래 세대가 일할 때 프로그램을 기대하는 것처럼 유동적으로 움직이기 때문에 지금은 끝없는 반복이되고 싶습니다.생명의 게임 - 동일한 위치에 보드 인쇄

+0

사용'setw' HTTP : //www.cplusplus.com/reference/iomanip/ – 101010

+0

또한 도움이 될 수 있습니다. http : //www.cplus plusetwforum/beginner/3207/ – mclaassen

+2

@ 40two 'setw()'를 사용하여 해결할 수 있을지 의심 스럽지만, 적어도 실제로 터미널이 제공하는 기능에 달려 있습니다. –

답변

2

Windows 터미널에있는 경우 http://en.wikipedia.org/wiki/ANSI_escape_code#Windows_and_DOS 이 도움이 될 것으로 보입니다.

char csi_esc = 27; 
char csi_begin = '['; 
// clear screen and reposition cursor 
cout<<csi_esc<<csi_begin<< "2J]"; 

이 처음으로 작동 할 수 있습니다. (테스트되지 않은, 나는 창 터미널에 액세스 할 수 없습니다).

죄송합니다. 위키 문서를 매우 열악하게 읽었습니다.

Win32 콘솔은 all에서 ANSI 이스케이프 시퀀스를 기본적으로 지원하지 않습니다. ANSICON [7]과 같은 소프트웨어는 표준 Win32 콘솔에 대한 래퍼로 작동하고 ANSI 이스케이프 시퀀스에 대한 지원을 추가 할 수 있습니다. 그렇지 않으면 소프트웨어가 ioctl과 같은 콘솔을 조작해야합니다. Console API [8]가 텍스트 출력과 인터레이스됩니다. 일부 소프트웨어 은 인쇄중인 텍스트에서 ANSI 이스케이프 문자열을 내부적으로 해석하고 은 이러한 호출로 변환합니다. [9]

대신 일반 WinAPI 호출을 사용해야합니다. 라이브러리를 유닉스 기반 시스템 만

#include<ncurses.h> 

의 터미널에 있고 연결하면

#include<windows.h> 

void PrintBoard(){ 
    // Position cursor at 0,0 
    HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE); 
    COORD coord; 
    coord.X = coord.Y = 0; 
    SetConsoleCursorPosition(console, coord); 
    // Draw the rest of the stuff. 
} 

Using High Level Input and Output FunctionsAPI reference

를 참조

g++ -o life life.cpp -lncurses 
+0

이것은 이전 출력 "<- [2J] 1"다음에 다른 행을 표시하지만 커서가 화면의 맨 위로 돌아 가지 않습니다. 아마 내가 잘못했거나 뭔가를 물어봤을거야.나는 버퍼와 백 버퍼 작업 그래서 난 아직 화면을 새로 고치는 원래에 인쇄 된 같은 장소에 다시 보드를 인쇄하려면 얼마나 유사 할 것이다 일이 원하는 것은. – user3255112

+0

는 user3255112 @ 사실, 내가 잘못 위키 기사를 읽고 일부는 Win32 호출을 추가했다. –