2017-11-26 1 views
-2

擬似亀のグラフィックプログラムを作成することです。私はすでに最初に立ち往生しています。カメは左上からペンを上にして始まるはずです(これは図のTです)。私はTを小文字のtに変更して、ユーザがpenDown()を使用したいときを示す方法を理解できません。最初に、私が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 *の質問と同様に)、私はOPがASCIIグラフィックスを使用していると信じています外部ライブラリが必要です。 – cdlane

答えて

1

おそらく次のことは達成しようとしているものに近いです。私はそれを少し簡略化しました。数字を置き換える記号を追加しました。ボードを検索するのではなく、カメの現在のXとYの位置を追加しました。冗長性を失ったdrawing表現。

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

あなたは今、入力することができるはずです::case広範囲if else文になっていたものを置き換えるために、ステートメントを追加6、2、6、1、6、9

をし、ペンの状態を参照してください変化。

関連する問題