C 程序,如何使用循环在较大的形状上打印形状?

C Program, How to print shapes on a larger shape using loops?

刚开始学C,想求助一下

我目前正在使用 *s 在更大的形状上打印几个不同的形状。

我正在使用 2 个 for 循环,外循环打印出底数 shape/map(例如 10 x 5 矩形),内循环打印出另一个形状(例如 2 x 3 矩形)基本形状。

这是我现在拥有的:

使用以下代码:

 void createMapAndAddFeature(int x, int y, int xloc, int yloc, int feat_x_dim, int feat_y_dim)
{
    for (int i = 0; i < y; i++)
    {       
        for (int j = 0; j < x; j++)
        {
            //starting from which row
            //xloc refers to which column, yloc refers to which row. 
            //e.g. xloc = 0, plots on 1st column.  yloc = 2, plots on 3rd row
            if (yloc == i && xloc == j) {
                printf(" *"); //indicates at which coordinate to start plotting                 
            }                   
            else {
                printf(" ."); // . is the full shape
            }           
        }
        printf("\n");
    }

}

x 和 y 位置帮助我确定我应该开始绘制形状的位置,因此我在地图中有一个 *。

现在,我卡在需要在地图上创建形状的部分,例如,使用尺寸 2 和 3,这将导致以下输出:

有人知道如何实现吗?

我需要另一个嵌套的 for 循环吗?或者另一个 "if else" 语句在基本形状上绘制 2x3 形状?

此外,我该怎么做才能同时绘制多个形状? 例如,另一个 2x2 正方形:

我想我需要更多 "if else" 条件来检查循环中的现有 *s,然后绘制后续的新形状,以便它与现有形状重叠。如有错误请指正

非常感谢任何帮助和建议。提前致谢。

(对我而言)最简单的方法是遍历 space 中的所有点,并对每个点进行分类:

  • 如果在最外边,打印一个*(可选)
  • 如果它在内部特征上,打印一个*
  • 否则打印一个.

这是一个快速尝试:

#include <stdio.h>

static void printFigure(int width, int height, int fx, int fy, int fwidth, int fheight)
{
    for (int y = 0; y < height; ++y)
    {
        for (int x = 0; x < width; ++x)
        {
            char out;
/*          if (x == 0 || y == 0 || x == width - 1 || y == height - 1)
                out = '*';
*/          if(x >= fx && y >= fy && x < (fx + fwidth) && y < (fy + fheight))
                out = '*';
            else
                out = '.';
            putchar(out);
        }
        putchar('\n');
    }
}

int main(void) {
    printFigure(10, 5, 0, 2, 2, 3);
    return 0;
}

这会打印:

..........
..........
**........
**........
**........

注释掉的部分实现了第一个(可选)的想法,标记外边框。我最初认为这是一个目标,但意识到我误读了。决定保留代码,因为它可能具有指导意义。

你当然可以做一个循环并从 "pixel index" 计算 xy,但我不认为这对像这样的简单东西更好。