c - 用C制作我自己的 turtle 图形,无法更改数组中元素的值

标签 c turtle-graphics

作业是创建一个伪 turtle 图形程序。我已经卡在开头了。 turtle 应该从左上角开始,笔朝上(图中的 T)。我不知道如何将 T 更改为小写 t 以指示用户何时想要使用 penDown() 。即使在一开始,如果我使用 display() ,程序将正确绘制一个充满空白的 50x50 Canvas ,但不会绘制角落中的初始 T。

我应该使用一个用 0 填充的 50x50 数组。数组中的 1 表示在图 block 上绘制。我用 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");
     }

}

最佳答案

也许以下内容更接近您想要实现的目标。我稍微简化了一下;添加符号来代替数字;添加了 turtle 当前 X 和 Y 位置的感知,而不是搜索棋盘;删除了多余的绘图表示;添加了 case 语句来替换大量的 if else 语句:

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

您现在应该可以输入:6, 2, 6, 1, 6, 9

并查看笔状态的变化。

关于c - 用C制作我自己的 turtle 图形,无法更改数组中元素的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47494184/

相关文章:

c - 如何访问用户态内存?

c - ODBC 单连接或每线程一个连接

c - 如何强制autoconf不定义宏?

c - lpthread:编译时警告,执行时奇怪的结果

Python turtle 井字游戏

java - 图形 JPanel 大小调整

c - 查找可用堆空间背后的逻辑

python - 有没有办法可以设置 python turtle 的背景颜色?

python - 使用 turtle 图形的谢尔宾斯基三角形递归

python - turtle 创建了一个额外的屏幕(不需要)