是否可以在仅用于循环的形状中绘制形状?如果是,请给我指一个正确的方向



我想画一个简单的正方形地图,由星号网格组成,在网格内,我想画其他形状。

示例输出:

xxxxxooxxxx
xxxxxooxxxx
xxxxxxxxxxx
xxxxxxxxxxx
ooxxxxxxxxx
ooxxxxxxxxx

我试着简单地把小形状的嵌套循环放在大形状的嵌套环路中,这导致了一些变形的无限矩形

我试着让较小形状的开始和结束条件不同(我的想法是这些条件相当于坐标,但显然是错误的)

任何帮助都将不胜感激,我希望使用循环来解决这个问题,但也欢迎其他方法。

这是我的实际代码{#include使用命名空间std;int main(){

    for(int row=0;row<26;row++)
    {
        for(int column=0;column<26;column++)
        {
            cout << "*";
        }
    cout<< endl;
    }
      for (int i=5;i<10;i++)
            {
                for (int j=5;j<10;j++)
                {
                    cout << "x";
                }
            cout << endl;
            }

}

该代码目前绘制了两个正方形,一个26x26,一个5x5。我想知道如何将5x5正方形插入26x26正方形中。我还想知道如何控制其在较大正方形内的位置

最好先构造要打印的内容,然后再打印。cout只是在当前位置打印到控制台,没有简单的方法可以在已经输出的文本中重置该位置。有一些库可以为您提供ncurses这样的功能,但这可能比您想要的要多。

试试这样的东西:

#include <iostream>
#include <vector>
typedef std::vector<char> GridRow;
typedef std::vector<GridRow> Grid;
void InitGrid(Grid& grid, int width, int height, char symbol = ' ')
{
    grid.clear();
    grid.resize(height);
    for(size_t i = 0; i < grid.size(); ++i)
    {
        grid[i].clear();
        grid[i].resize(width, symbol);
    }
}
void DrawRectangle(Grid& grid, char symbol, int x, int y, int width, int height)
{
    //Reject out of bounds rectangles.  An alternative would be to clip them.
    if(grid.empty() || grid.size() < static_cast<size_t>(y + height) || grid[0].size() < static_cast<size_t>(x + width))
    {
        return;
    }
    for(int h = y; h < (y + height); ++h)
    {
        GridRow& row(grid[h]);
        for(int w = x; w < (x + width); ++w)
        {
            row[w] = symbol;
        }
    }
}
void PrintGrid(const Grid& grid)
{
    std::string line;
    for(size_t h = 0; h < grid.size(); ++h)
    {
        const GridRow& row(grid[h]);
        for(size_t w = 0; w < row.size(); ++w)
        {
            std::cout << row[w];
        }
        std::cout << std::endl;
    }
}
int main()
{
    Grid grid;
    InitGrid(grid, 11, 6, 'x');
    DrawRectangle(grid, 'o', 5, 0, 2, 2);
    DrawRectangle(grid, 'o', 0, 4, 2, 2);
    PrintGrid(grid);
    std::cout << std::endl;
    InitGrid(grid, 15, 15);
    DrawRectangle(grid, '*', 1, 1, 8, 8);
    DrawRectangle(grid, '*', 6, 6, 8, 8);
    PrintGrid(grid);
    return 0;
}

你可能想把网格包装在一个类中,使它更干净,但我认为这可能更容易理解。

最新更新