如何在C ++中移动ASCII艺术绘图?

时间:2014-03-04 09:34:15

标签: c++

我想让一个三角形向左和/或向右移动一个空格。

cout << setw(10) << "*" <<  endl;
cout << setw(9) << "*" << setw(2) << "*" <<  endl;
cout << setw(8) << "*" << setw(4) << "*" <<  endl;
cout << setw(7) << "*" << setw(6) << "*" <<  endl;
cout << setw(6) << "*" << setw(8) << "*" <<  endl;
cout << setw(5) << "*" << setw(10) << "*" <<  endl;
cout << setw(4) << "*" << setw(12) << "*" <<  endl;
cout << setw(3) << "*" << setw(14) << "*" <<  endl;
cout << setw(2) << "*" << setw(16) << "*" <<  endl;
cout << setfill('*') << setw(19) << "*" << endl;

while(ch = 'a','d'){
    cout << "Enter: 'a' move left, 'd' move right" << endl;
    cin >> ch;

    if(ch == 'a'){
    cout.setf(ios::left);

上面的代码显示了三角形的样子。所以基本上我希望用户输入'a'[向左移动]和/或'b'[向右移动]。我该如何编程,所以它会移动整个三角形以向左或向右移动1个空格,同时保留形状?

基于我所看到的,使用cout.setf(ios :: left)将是最简单的,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

将cout用于图形总是有点奇怪。它并非真正用于绘图/动画。

您可以尝试这样的事情(使用一些函数从while循环内部重复打印三角形):

void print_triangle(int n)
{
    cout << setw(n + 10) << "*" <<  endl;
    cout << setw(n + 9) << "*" << setw(2) << "*" <<  endl;
    cout << setw(n + 8) << "*" << setw(4) << "*" <<  endl;
    cout << setw(n + 7) << "*" << setw(6) << "*" <<  endl;
    cout << setw(n + 6) << "*" << setw(8) << "*" <<  endl;
    cout << setw(n + 5) << "*" << setw(10) << "*" <<  endl;
    cout << setw(n + 4) << "*" << setw(12) << "*" <<  endl;
    cout << setw(n + 3) << "*" << setw(14) << "*" <<  endl;
    cout << setw(n + 2) << "*" << setw(16) << "*" <<  endl;
    cout << setfill('*') << setw(19) << "*" << endl;
}

void clear_screen()
{
    cout << string( 100, '\n' );
}

用过:

int n = 0;
while(ch == 'a' || ch == 'd'){
    clear_screen();
    print_triangle(n);
    cout << "Enter: 'a' move left, 'd' move right" << endl;
    cin >> ch;

    if(ch == 'a'){
        n++;
    } else if(ch == 'd'){
        n--;
    }
}