下面我有一个多维数组,我写了一个8x8块,并显示了国际象棋游戏中所有棋子的起始位置。
我想知道两个问题:
如何在两侧添加数字1-8,从左到右添加字母A-H?
打印到控制台时,阵列中未填充的所有空格都保持空白。如果我想移动一块,说皇后典当一个手动,我怎么能再次显示屏幕,但这次离开原来的位置,当棋子像其他人一样空白?
感谢您的时间,
标记
#include <iostream>
#include <string>
#include<iomanip>
using namespace std;
int main()
{
string chess[8][8];
for (int j=0;j<8;j++)
{
chess [1][j]= "P";
chess [6][j]= "P";
chess [0][0]="R";
chess [7][0]="R";
chess [0][7]="R";
chess [7][7]="R";
chess [0][1]="Kn";
chess [7][1]="Kn";
chess [0][6]="Kn";
chess [7][6]="Kn";
chess [0][2]="B";
chess [7][2]="B";
chess [0][5]="B";
chess [7][5]="B";
chess [0][3]="Q";
chess [7][3]="Q";
chess [0][4]="Ki";
chess [7][4]="Ki";
}
for (int a=0;a<8;a++)
{
for (int b=0;b<8;b++)
{
cout<<setw(4)<<chess[a][b];
}
cout<<endl;
}
system ("pause");
return 0;
}
答案 0 :(得分:0)
首先,将初始化代码和显示代码移出main
并分成两个独立的函数。 (注意,初始化不需要第二个循环和所有那些if
语句;它只是对数组元素进行赋值,并且没有所有附加功能。然后,要移动女王的棋子,只需swap(chess[1][3], chess[2][3])
并再次致电display()
。
要显示等级和文件标记,只需在开始绘制电路板之前写一行文件标记。排名标记应该写在显示代码中的外部for
循环内。
答案 1 :(得分:0)
1)为列添加额外的循环范围:
cout << " ";
for (int b=0;b<8;b++)
cout << setw(4) << static_cast<char>('A'+b);
cout << endl;
为行添加额外输出:
for (int a=0;a<8;a++)
{
cout << setw(4) << a;
for (int b=0;b<8;b++)
cout<<setw(4)<<chess[a][b];
cout<<endl;
}
根据要求,工作示例是:
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
string chess[8][8];
int main()
{
cout << " ";
for (int c=0; c<8; ++c)
cout << setw(4) << static_cast<char>('A'+c);
cout << endl;
for (int r=0; r<8; ++r)
{
cout << setw(4) << r;
for (int c=0; c<8; ++c)
cout << setw(4) << chess[r][c];
cout << endl;
}
}
2)没有简单的方法,但你可能会幸运使用ESC代码(http://en.wikipedia.org/wiki/ANSI_escape_code),它允许你在某些终端上打印之前设置列/行。
答案 2 :(得分:0)
这是我在提到Nyrl的建议后提出的问题的第一部分的答案(根据Pete Becker的建议编辑原始帖子)
#include <iostream>
#include <string>
#include<iomanip>
using namespace std;
int main()
{
string chess[8][8];
for (int j=0;j<8;j++)
{
chess [1][j]= "P";
chess [6][j]= "P";
chess [0][0]="R";
chess [7][0]="R";
chess [0][7]="R";
chess [7][7]="R";
chess [0][1]="Kn";
chess [7][1]="Kn";
chess [0][6]="Kn";
chess [7][6]="Kn";
chess [0][2]="B";
chess [7][2]="B";
chess [0][5]="B";
chess [7][5]="B";
chess [0][3]="Q";
chess [7][3]="Q";
chess [0][4]="Ki";
chess [7][4]="Ki";
}
//below is the line to add the Letters for each column manually at the top.
cout<<setw(4)<<" "<<setw(4)<<'A'<<setw(4)<<'B'<<setw(4)<<'C'<<setw(4)<<'D'<<setw(4)<<'E'<<setw(4)<<'F'<<setw(4)<<'G'<<setw(4)<<'H'<<setw(4)<<endl;
cout<<endl;
for (int a=0;a<8;a++)
{
cout<<setw(4)<<a+1; `//adds the numbers before each row`
for (int b=0;b<8;b++)
{
cout<<setw(4)<<chess[a][b];
}
cout<<setw(4)<<a+1; `//adds the numbers after each row`
cout<<endl;
}
//below is the line to add the Letters for each column manually at the bottom.
cout<<endl;
cout<<setw(4)<<" "<<setw(4)<<'A'<<setw(4)<<'B'<<setw(4)<<'C'<<setw(4)<<'D'<<setw(4)<<'E'<<setw(4)<<'F'<<setw(4)<<'G'<<setw(4)<<'H'<<setw(4)<<endl;
system ("pause");
return 0;
}