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

时间:2013-05-15 06:43:19

标签: 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");

}

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

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:3)

您可以在printf();中使用gotoxy(x,y);for-loop

答案 1 :(得分: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中,尚未编译,因此可能有错误