2013-05-15 1 views
4

빈 셀, X 또는 사각형 하나의 행에 3 가지 셰이프의 모든 조합 (3! = 6)을 그려야합니다.효율적인 방법으로 3을 그립니다! (6 번) C에서 세 가지 모양

현재 코드 :

빈 셀의 경우 :

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"); 

} 

을하지만 무력하지 않고, 뭔가 다른 모든 방법을 찾고 있어요.

의견을 보내 주시면 대단히 감사하겠습니다.

답변

3

모양을 문자열 배열에 배치하는 것이 좋습니다. 그러면 적절한 알고리즘이 그려 줄 것입니다.

다음과 같은 것이 있습니다. 당신이 생각 물론, X, O, 빈은 줄의 같은 수를 유지하는 데 필요한

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"); 
    } 
} 

를 얻을 바랍니다. 이 오류

+0

@ 니스, 나는 그것을 시도하고 다시 연락 할게. 감사 . – ron

3

gotoxy(x,y);printf();을 사용할 수 있습니다.

+0

을 가질 수 있도록

지금 C에, 아니, 아직 컴파일'비표준이며, 영업 이익은 컴파일러 나 플랫폼을 지정하지 않은 gotoxy'. ncurses는 훨씬 더 일반적이고 이식 가능한 솔루션이 될 것입니다. –

+0

기본적으로 포인트가 있지만 적절한 알고리즘을 사용하여'gotoxy(); '를 사용하는 것은 스크린을 격자로 조작하는 것과 같습니다. 그것만으로도 도움이 될 수 있습니다. –

+2

@Christian Mark : 저는 우분투 플랫폼을 사용하고 있습니다. 따라서'#include '헤더를 사용할 수 없습니다. – ron