生命游戏 - 印刷板到同一个位置

时间:2014-06-18 18:10:45

标签: c++

#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;
    }
}

我的问题是将电路板打印到控制台上的相同位置。通过这种方式,它可以在控制台上向下打印数百个电路板。我希望它现在是一个无限循环,因为当我让后代部分工作时,它会像你一样流畅地移动,并期望该程序。

1 个答案:

答案 0 :(得分: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]";

可能是一个开始。 (未经测试,我无法访问Windows终端)。

哎呀,我读的维基文章非常糟糕。

  

Win32控制台本身不支持ANSI转义序列   所有。诸如ANSICON [7]之类的软件可以作为一个包装器   标准的Win32控制台并添加对ANSI转义序列的支持。   否则,软件必须使用类似ioctl的操作控制台   Console API [8]与文本输出交错。一些软件   在内部解释正在打印的文本中的ANSI转义序列   将它们翻译成这些电话。[9]

所以你应该使用常规的WinAPI调用。

#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

如果你在基于unix的系统中的终端

#include<ncurses.h>

并链接库

g++ -o life life.cpp -lncurses