4

3 つの形状のすべての組み合わせ (3! = 6) を 1 行に描画したい: 空のセル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

良いアプローチは、形状を文字列配列に入れることです。次に、適切なアルゴリズムがそれらを描画します

次のようなものが仕事をします。アイデアが得られることを願っています

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 に答える