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

How to move an ASCII art drawing in C++?

本文关键字:ASCII 艺术 绘图 移动 C++      更新时间:2023-10-16

我想让三角形向左和/或向右移动,只有 1 个空格。

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) 是最容易的,但我还不知道该怎么做。

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