4

我想在一行中绘制 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");

}

但我正在寻找别的东西,一路没有蛮力。

任何建议将不胜感激 。

4

2 回答 2

3

你可以使用gotoxy(x,y); 并且printf();在一个for-loop.

于 2013-05-15T06:47:17.197 回答
3

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

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

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 中,还没有编译,所以它可能有错误

于 2013-05-15T06:49:17.480 回答