将2d数组显示为地图

时间:2014-10-11 01:47:33

标签: c++ arrays class object multidimensional-array

我需要一个二维数组才能显示为地图。 g_length和w_width是从x和y点开始的时间。需要创建一个循环,其中包含应放置在地图上的裁剪的宽度和长度.x_crop和y_crop是应创建裁剪的x和y坐标。 w_width是width,g_length是位于类中的裁剪的长度或高度。

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

int y_total =y_crop;
y_total = y_crop + g_length;

for(int x=0; x < MAPW;x++){

    if(x==x_crop){
        for(int b=0; b < w_width;b++){
            if(y_total==y_crop){
                map[x][y_crop] = PlantType.symbol();
                x++;
                y_crop++;
            }else{
                b=w_width;
            }   
        x++;        
        }
    }
}


cout << '\n';
cout << setw(24) << right << "11111111112\n";
cout << setw(24) << right << "12345678901234567890\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 << "12345678901234567890\n";

return true;}

看看输出结果应该是什么样的:

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

&GT;

1 个答案:

答案 0 :(得分:1)

不要让循环过于复杂:

for (int x = x_crop; x < x_crop + w_width; ++x) {
    for (int y = y_crop; y < y_crop + g_height; ++y) {
        map[x][y] = PlantType.symbol();
    }   
}

一些补充说明:

  • 您可能需要考虑添加参数x_cropy_crop的检查,以便保持在地图的范围内
  • 使您的代码中的地图索引保持一致,在您使用map[x][y]索引的循环中,但参数声明char map[MAPL][MAPW]表明它应该由map[y][x]