我想画一个简单的正方形地图,由星号网格组成,在网格内,我想画其他形状。
示例输出:
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;
}
你可能想把网格包装在一个类中,使它更干净,但我认为这可能更容易理解。