2014-10-11 70 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

相關問題