2017-11-26 5 views
-2

psuedo-turtle 그래픽 프로그램을 만드는 것이 임무입니다. 나는 이미 처음에 붙어있다. 거북이는 왼쪽 상단에서 시작하여 펜을 위로 향하게합니다 (그림에서 T입니다). 사용자가 penDown()을 사용하려고 할 때를 나타 내기 위해 T를 소문자 t로 변경하는 방법을 알 수 없습니다. 처음에도 display()을 사용하면 빈 공간으로 채워진 50x50 캔버스가 제대로 그려 지지만 구석에 초기 T는 표시되지 않습니다.C로 거북 그래픽을 만들었으므로 배열의 요소 값을 변경할 수 없습니다.

0으로 채워진 50x50 배열을 사용해야합니다. 배열의 1은 타일에 그려진 것을 나타냅니다. 펜이 위 아래로 있는지를 나타 내기 위해 2와 3을 사용했습니다.

#include <stdio.h> 
#include <stdlib.h> 

/* 
* 
*/ 

void penUp(int input); 
void penDown(void); 
int turnRight(void); 
int turnLeft (void); 
int draw (void); 
void display (void); 
int end (void); 

char turtle, tile; 
static int canvas[50][50]; 
char drawing[50][50]; 
int i, j, input, a, b; 

int main(int argc, char** argv){ 


for(i = 0; i < 50; i++){ 
    for(j = 0; j < 50; j++){ 
     canvas[i][j] = 0; 
    } 
} 

for(i = 0; i < 50; i++){ 
    for(j = 0; j < 50; j++){ 
     drawing[i][j] = ' '; 
    } 
} 

canvas[0][0] = 2; 
input = 1; 


printf("Controls: \n"); 
printf("1 for pen up (capital T means pen is up) \n"); 
printf("2 for pen down (lowercase t means pen is down) \n"); 
printf("3 for turn right \n"); 
printf("4 for turn left \n"); 
printf("5 for drawing, followed by an int value for how many tiles to draw \n"); 
printf("6 to display drawing \n"); 
printf("9 to end program \n"); 

do{  
    printf("Enter command: "); 
    scanf("%d", &input); 

    if(input == 2){ 
     penDown(); 
    } 
    else if(input == 6){ 
     display(); 
    } 

    else if(input == 9){ 

    } 
}while(input != 0); 



return 0; 
} 

void penDown(void){ 
    for(i = 0; i < 50; i++){ 
     for(j = 0; j < 50; j++){ 
      if(canvas[i][j] == 2){ 
       canvas[i][j] == 3; 
       break; 
      } 
     } 
    } 
} 


void display(void){ 

    for(i = 0; i < 50; i++){ 
     for(j = 0; j < 50; j++){ 
      if(canvas[i][j] == 2){ 
       drawing[i][j] == 'T'; 
      } 
      else if(canvas[i][j] == 3){ 
       drawing[i][j] == 't'; 
      } 
     } 
    } 

    for(a = 0; a < 50; a++){ 
     for(b = 0; b < 50; b++){ 
      printf("%c", drawing[a][b]); 
     } 
     printf("\n"); 
    } 

} 
+1

'penUp()'은 어디에 있습니까? – iBug

+1

표준 C에는 그래픽이 없습니다. 원한다면 외부 라이브러리를 사용해야합니다. 모든 경고와 디버그 정보로 코드를 컴파일하십시오. 'gcc -Wall -Wextra -g'. 그것을 향상시켜 경고를 얻지 마십시오. ** 디버거 **'gdb'를 사용하십시오. 당신의 질문에 SO –

+0

@BasileStarynkevitch에 [MCVE]가 없기 때문에 주제가 (모든 * fix-my-code * 또는 * do-my-homework * 질문과 같이) @BasileStarynkevitch에 있습니다. OP가 ASCII 그래픽을 사용하지 않는다고 생각합니다. 외부 라이브러리가 필요합니다. – cdlane

답변

1

아마도 다음은 달성하려는 목표에 더 가깝습니다. 나는 그것을 약간 단순화했다. 숫자를 대체 할 추가 기호; 보드를 검색하는 대신 거북이의 현재 X 및 Y 위치에 대한 감각을 추가했습니다. 중복 drawing 표현을 떨어 뜨렸다; , 6, 2, 6, 1, 6 9

및 펜의 상태를 참조하십시오

#include <stdio.h> 
#include <stdlib.h> 

#define WIDTH 50 
#define HEIGHT 50 

enum TILE_TYPES { EMPTY, FILLED, UP, DOWN }; 

void penUp(int x, int y); 
void penDown(int x, int y); 
int turnRight(void); 
int turnLeft(void); 
int draw(void); 
void display(void); 
int end(void); 

int canvas[WIDTH][HEIGHT]; 

int main(int argc, char** argv) { 

    for (int j = 0; j < HEIGHT; j++) { 
     for (int i = 0; i < WIDTH; i++) { 
      canvas[i][j] = EMPTY; 
     } 
    } 

    int x = 0, y = 0; // update these as turtle moves 
    canvas[x][y] = UP; 

    int input = -1; 

    printf("Controls:\n"); 
    printf("1 for pen up (capital T means pen is up)\n"); 
    printf("2 for pen down (lowercase t means pen is down)\n"); 
    printf("3 for turn right\n"); 
    printf("4 for turn left\n"); 
    printf("5 for drawing, followed by an int value for how many tiles to draw\n"); 
    printf("6 to display drawing\n"); 
    printf("9 to end program\n"); 

    do { 
     printf("Enter command: "); 
     scanf("%d", &input); 

     switch (input) { 
      case 1: 
       penUp(x, y); 
       break; 

      case 2: 
       penDown(x, y); 
       break; 

      case 6: 
       display(); 
       break; 

      case 9: 
       exit(0); 
     } 

    } while (input != 0); 

    return 0; 
} 

void penDown(int x, int y){ 
    if (canvas[x][y] == UP) { 
     canvas[x][y] = DOWN; 
    } 
} 

void penUp(int x, int y){ 
    if (canvas[x][y] == DOWN) { 
     canvas[x][y] = UP; 
    } 
} 

void display(void) { 

    for (int j = 0; j < HEIGHT; j++) { 
     for (int i = 0; i < WIDTH; i++) { 
      switch (canvas[i][j]) { 
       case EMPTY: 
       printf("%c", ' '); 
       break; 

       case FILLED: 
       printf("%c", 'X'); 
       break; 

       case UP: 
       printf("%c", 'T'); 
       break; 

       case DOWN: 
       printf("%c", 't'); 
       break; 
      } 
     } 

     printf("\n"); 
    } 
} 

이제 입력 할 수 있어야합니다 if else 문 광범위한 될 것입니다 무엇을 대체 할 case 문을 추가 작고 보기 흉한 사람.