我的目标是拥有一个数组并在控制台中打印这个数组,并有用户输入来修改这个板 - 我把这一切都搞定了 - 但是现在我想要覆盖以前的板,这样它看起来就像是一块连续板被修改。
所以我希望我的数组看起来如下:
[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";
}
答案 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;
}