2014-10-11 20 views
0

我正在尝试在地图/网格上放置裁剪。裁剪是需要在地图边框中显示的字符串。我需要使用2d数组来显示将在地图上形成裁切形状的单个字符。这是迄今为止的代码,但它在显示时不会给我正确的形状。使用2d数组显示地图/网格上的坐标

bool Crop::place(char map[MAPL][MAPW],int x_crop,int y_crop)const{ 

cout << '\n'; 
cout << setw(24) << right << "11111111112\n"; 
cout << setw(24) << right << "123456789\n"; 
cout << " " << setw(21) << setfill('-') << left << '+' << right << '+' << setfill (' ') <<  endl; 



for(int x=0; x < MAPW;x++){ 
    cout << setw(2) << right << x+1 << "|"; 
    for(int y=0; y < MAPL;y++){ 
     cout << map[x][y]; 

    } 
    cout << "|" << endl; 
} 

cout << " " << setw(21) << setfill('-') << left << '+' << right << '+' << setfill (' ') << endl; 
cout << setw(24) << right << "11111111112\n"; 
cout << setw(24) << right << "123456789\n"; 

return true; 
} 

以下是输出结果的示例。它有两种作物,地图是20宽10高

  11111111112 
    123456789
    +--------------------+ 
1|     | 
2|     | 
3| cc    | 
4| cc    | 
5| cc    | 
6| cc    | 
7|   pppppppp | 
8|   pppppppp | 
9|   pppppppp | 
10|     | 
+--------------------+ 
      11111111112 
    123456789

回答

0

它看起来像你有什么是横盘错误的“C”和“p”。在循环中:

for(int x=0; x < MAPW;x++){ 
    cout << setw(2) << right << x+1 << "|"; 
    for(int y=0; y < MAPL;y++){ 
     cout << map[x][y]; 
    } 
    cout << "|" << endl; 
} 

您一次打印一列而不是一次一行(列 - 主要订单),因此它将打印字段横向。如果您切换MAPW和MAPL(和开关x和y使变量的描述这种变化的),做

for(int y=0; y < MAPL;y++){ 
    cout << setw(2) << right << y+1 << "|"; 
    for(int x=0; x < MAPW;x++){ 
     cout << map[y][x]; 
    } 
    cout << "|" << endl; 
} 

你会被打印一行在同一时间(行优先的顺序),并打印出每在该领域的空间。

+0

我试过了你的建议,但是当我使用的时候发生了什么事情,那个数组太小了,数组在最大值超过后就抓住了垃圾字符。我的意思是地图必须是10高度和20宽度,所以如果我将它们反转,高度将超过10到20,并获得随机值而不是数组中的字符。 – joshcunningsworth 2014-10-11 03:16:47

+0

您是否在代码中或在循环中切换MAPL和MAPW?我只是在循环中切换它们,并为我工作。基本上你要做的就是让外层循环迭代MAPL时间(地图中的行数),而内层循环迭代MAPW次数(一行中的空间数)。 – 2014-10-11 03:22:57

+0

我只在循环中切换它们,但也许是因为MAPL&MAPW的值是在名为map.h的头文件中定义的。 – joshcunningsworth 2014-10-11 03:26:05

相关问题