C ++在2D数组中显示char

时间:2014-08-24 01:23:59

标签: c++ multidimensional-array

我正在尝试显示char Ninja但由于某种原因,当我的数组加载时,地图内部为空。我在地图清除之前定义了char Ninja,所以我不确定可能出现的问题。

#include <iostream>
using namespace std;

int main()
{
    //characters

    //nina character coordinates
    char Ninja = 'N';
    int NinjaX = 20;
    int NinjaY = 50;

    char Samurai = 'S';
    char Horsemen = 'H';
    char Spearmen = 'M';
    char Archer = 'A';

    //map size
    const int H = 35;
    const int W = 82;
    char Map[H][W];

    int GameOver = 0;

    //display ninja character
    Map[NinjaX][NinjaY] = Ninja;


    //display map
    for(int i = 0; i < H; i++ )  // display the map
    {
        for(int j = 0; j < W; j++)
        {
            if(i == 0 || i == 34 || j == 0 || j == 81)
                Map[i][j] = 'x';
            else Map[i][j] = ' ';
            cout << Map[i][j];

        }
        cout << '\n';
    }
}

2 个答案:

答案 0 :(得分:0)

尽管我鼓掌,你只想使用一个循环来减少冗余,但我必须坚持你将地图循环两次。首先用边框和空格初始化它。然后,在初始化之后和任何循环之外,你把所有东西都放在它上面(弓箭手,忍者等)。然后你再次遍历地图,以打印它,包含它上面的所有内容。

目前你正在初步化之后你把东西放在地图上,这会覆盖它,正如其他人指出的那样。

答案 1 :(得分:0)

user1990169是正确的。在显示它们之前,您已经在Map中编写了值。在我看来,你正试图在你显示它的同一个循环中用边框初始化游戏板(Map)。最简单和最灵活的解决方案是首先初始化空白地图,然后放置你的忍者。然后再次循环以显示Map。如果你真的必须在一个循环中完成所有操作,可以这样做:

//display map
for(int i = 0; i < H; i++ )  // display the map
{
    for(int j = 0; j < W; j++)
    {
        if (Map[i][j] == Ninja)
          cout << Map[i][j];
        else
        {
           if(i == 0 || i == 34 || j == 0 || j == 81)
             Map[i][j] = 'x';
           else Map[i][j] = ' ';
           cout << Map[i][j];
        }
    }
    cout << '\n';
}