多维数组,类型和格式

时间:2013-12-08 21:41:02

标签: c++ types multidimensional-array

下面我有一个多维数组,我写了一个8x8块,并显示了国际象棋游戏中所有棋子的起始位置。

我想知道两个问题:

  1. 如何在两侧添加数字1-8,从左到右添加字母A-H?

  2. 打印到控制台时,阵列中未填充的所有空格都保持空白。如果我想移动一块,说皇后典当一个手动,我怎么能再次显示屏幕,但这次离开原来的位置,当棋子像其他人一样空白?

  3. 感谢您的时间,

    标记

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

3 个答案:

答案 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;
    }