首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用C语言绘制3!(6次)三个形状的有效方法

用C语言绘制3!(6次)三个形状的有效方法
EN

Stack Overflow用户
提问于 2013-05-15 14:43:19
回答 2查看 170关注 0票数 4

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

当前代码:

对于空单元格:

代码语言:javascript
复制
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");

}

对于带矩形的单元格:

代码语言:javascript
复制
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的单元格:

代码语言:javascript
复制
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个选项,例如:

代码语言:javascript
复制
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");

}

但我在寻找另一种东西,不需要任何暴力。

任何建议都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-15 14:49:17

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

下面这样的代码就可以完成这项工作。希望你明白我的意思

代码语言:javascript
复制
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中,还没有编译,所以它可能会有错误

票数 3
EN

Stack Overflow用户

发布于 2013-05-15 14:47:17

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16558457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档