我正在尝试显示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';
}
}
答案 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';
}