在终端中生成一个覆盖前一个板的阵列

时间:2015-12-20 00:38:21

标签: c++ arrays

我的目标是拥有一个数组并在控制台中打印这个数组,并有用户输入来修改这个板 - 我把这一切都搞定了 - 但是现在我想要覆盖以前的板,这样它看起来就像是一块连续板被修改。

所以我希望我的数组看起来如下:

[1, 1, 1]    [2, 2, 2]
[2, 2, 2] -> [1, 1, 1]
[3, 3, 3]    [3, 3, 3]

控制台上同样的3行。我很确定我要使用carriage我知道如何处理单行,但我不熟悉将carriage用于多行。

我尝试设置它,以便每一行都覆盖自己,但它似乎没有效果。

for(int i = 0; i < 3; i++) {
   for(int j = 0; j < 3; j++) {
      std::cout << board[i][j];
   }
   std::cout << "\r";
}

1 个答案:

答案 0 :(得分:0)

或者,您可以尝试打印大量新行并重新打印数组,以便让它产生错觉。这是一个简单的“15拼图”游戏,我用这种技术写下了你的想法:

#include <iostream>

using namespace std;
#define SZ 4

void printArray(string a[][SZ])
{ std::cout<<"\n\n\n\n\n\n\n\n\n";
    for (int i=0; i<SZ; ++i)
    {
        for(int j=0; j<SZ; ++j)
        {
            std::cout<< a[i][j] <<"\t";
        }
        std::cout<<"\n\n\n";
    }

std::cout<<"\n\n\n\n\n\n\n\n";
}

int main()
{
    string a[SZ][SZ] ={
    {"5","2","4","12"},
        {"6","8","10","1"},
        {"9","7"," ","15"},
        {"13","14","3","11"}};

    string choice;

    int x=2; //first coordinate of empty space
    int y=2; //second coordinate of empty space
    while(true)
    {
        printArray(a);
        cin>>choice;

        if(choice=="w")
        {
            //space has to move up
            if(x>0) //can still move up
            {
                string tmp=a[x-1][y];
                a[x-1][y]=" ";
                a[x][y]=tmp;
                x--;
            }
        }
        else if (choice=="a")
        {
            //space has to move left
            if(y>0)
            {
                string tmp=a[x][y-1];
                a[x][y-1]=" ";
                a[x][y]=tmp;
                y--;
            }

        }
        else if (choice=="s")
        {
            //space has to move down
            if(x<SZ-1)
            {
                string tmp=a[x+1][y];
                a[x+1][y]=" ";
                a[x][y]=tmp;
                x++;
            }

        }
        else if(choice=="d")
        {
            //space has to move right
             if(y<SZ-1)
             {
                 string tmp=a[x][y+1];
                 a[x][y+1]=" ";
                 a[x][y]=tmp;
                 y++;
             }
        }
        else
        {
        cout<<"invalid input!\n";
        }

    }


    return 0;
}