0

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

示例输出:

xxxxxooxxxx
xxxxxooxxxx
xxxxxxxxxxx
xxxxxxxxxxx
ooxxxxxxxxx
ooxxxxxxxxx

我试过简单地将小形状的嵌套循环放在大形状的嵌套循环中,这会导致一些变形的无限​​矩形

我已经尝试为较小的形状设置不同的开始和结束条件(我的想法是那些等同于坐标,但显然那是错误的)

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

这是我的实际代码 {#include using namespace std; 诠释主要(){

    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;
            }



}

该代码当前绘制了 2 个正方形,一个 26x26 和一个 5x5。我想知道如何将 5x5 方格插入 26x26 方格中。我也想知道如何控制它在大方块内的位置

4

1 回答 1

1

最好先构建您要打印的内容,然后再打印。 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;
}

您可能希望将网格包装在一个类中以使事情更清洁,但我认为这可能更容易理解。

于 2013-08-04T08:30:44.893 回答