c - 画3的有效方法! ( 6 次) C 中的三个形状

标签 c ubuntu drawing ascii shapes

我想在一行中绘制 3 种形状的所有组合 (3!=6):空单元格、X 或矩形。

当前代码:

对于空单元格:

void drawEmptyCell()
{

    printf("||||||||||||||||||||||||||\n");
    printf("|                        |\n");
    printf("|                        |\n");
    printf("|                        |\n");
    printf("|                        |\n");
    printf("|                        |\n");
    printf("|                        |\n");
    printf("|                        |\n");
    printf("|                        |\n");
    printf("|                        |\n");
    printf("|                        |\n");
    printf("||||||||||||||||||||||||||\n");

}

对于带有矩形的单元格:

void drawCellWithRectangle()
{

    printf("||||||||||||||||||||||||||\n");
    printf("|                        |\n");
    printf("|                        |\n");
    printf("|     **************     |\n");
    printf("|     *            *     |\n");
    printf("|     *            *     |\n");
    printf("|     *            *     |\n");
    printf("|     *            *     |\n");
    printf("|     *            *     |\n");
    printf("|     **************     |\n");
    printf("|                        |\n");
    printf("|                        |\n");
    printf("||||||||||||||||||||||||||\n");

}

对于带有 X 的单元格:

void drawCellWithX()
{

    printf("||||||||||||||||||||||||||\n");
    printf("|                        |\n");
    printf("|   *               *    |\n");
    printf("|     *           *      |\n");
    printf("|       *       *        |\n");
    printf("|         *   *          |\n");
    printf("|           *            |\n");
    printf("|         *   *          |\n");
    printf("|       *       *        |\n");
    printf("|     *           *      |\n");
    printf("|   *               *    |\n");
    printf("|                        |\n");
    printf("||||||||||||||||||||||||||\n");

}

我可以使用蛮力方式并采用所有 6 个选项,例如:

void drawOption1()
{
    // empty , rectangle , x

    printf("||||||||||||||||||||||||||");printf("||||||||||||||||||||||||||");printf("||||||||||||||||||||||||||\n");
    printf("|                        |");printf("|                        |");printf("|                        |\n");
    printf("|                        |");printf("|                        |");printf("|   *               *    |\n");
    printf("|                        |");printf("|     **************     |");printf("|     *           *      |\n");
    printf("|                        |");printf("|     *            *     |");printf("|       *       *        |\n");
    printf("|                        |");printf("|     *            *     |");printf("|         *   *          |\n");
    printf("|                        |");printf("|     *            *     |");printf("|           *            |\n");
    printf("|                        |");printf("|     *            *     |");printf("|         *   *          |\n");
    printf("|                        |");printf("|     *            *     |");printf("|       *       *        |\n");
    printf("|                        |");printf("|     **************     |");printf("|     *           *      |\n");
    printf("|                        |");printf("|                        |");printf("|   *               *    |\n");
    printf("|                        |");printf("|                        |");printf("|                        |\n");
    printf("||||||||||||||||||||||||||");printf("||||||||||||||||||||||||||");printf("||||||||||||||||||||||||||\n");

}

但我正在寻找其他东西,一路上都没有蛮力。

如有任何建议,我们将不胜感激。

最佳答案

一个好的方法是将形状放入一个字符串数组中。 然后一个适当的算法将绘制它们

像下面这样的东西就可以完成这项工作。 希望你明白这一点

char* x[] = { 
  "||||||||||||||||||||||||||",
  "|                        |",
  "|   *               *    |",
  "|     *           *      |",
  "|       *       *        |",
  "|         *   *          |",
  "|           *            |",
  "|         *   *          |",
  "|       *       *        |",
  "|     *           *      |",
  "|   *               *    |",
  "|                        |",
  "||||||||||||||||||||||||||"};
char* o[] ..
char* empty[] ..
..
output (" XO");
..
void output (const char* pOut) {
  // assert (sizeof(x) == sizeof(o));
  // assert (sizeof(x) == sizeof(empty));
  int i, j;

  for (i = 0; i < sizeof(o) / sizeof(o[0]); i ++) {
    const char* c = pOut;
    while (*c != 0) {
      switch (*c ++) {
      case 'X':
       printf (x[i]); break; 
      case 'O':
       printf (o[i]); break;
      default: 
         printf (empty[i]); break;
      }
    }
    printf ("\n");
  }
}

显然 x,o, empty 需要保持相同的行数。

现在是C,还没有编译,所以可能有错误

关于c - 画3的有效方法! ( 6 次) C 中的三个形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16558457/

相关文章:

写入 char* 数组的 char 会发生某种变化

c - 如何避免特定情况下的忙循环

linux - 在 Kubuntu 设备上执行命令

objective-c - 在 Objective C 中绘制带有渐变的图表

c++ - 是否可以仅使用循环在形状内绘制形状?如果是这样,请指出正确的方向

c - 将 C 或 C99 中的结构数组初始化为所有相同的值

c - 执行命令并获取变量的 o/p

linux - 修剪 PS1 的工作目录路径

python - Ubuntu 16.04 LTS中tensorflow安装错误

wpf - 实时移动矩形时半透明窗口在多个屏幕上的性能