c中if-break的替代选项?

h6my8fg2  于 2022-12-11  发布在  其他
关注(0)|答案(1)|浏览(130)

你好,我还是一个初学者,当谈到编程,我一直在工作的跳棋游戏。但是,我们不能使用'打破'到我们的程序,除非如果它的开关情况。我怎么能修改我的工作?我已经尝试循环使用它的同时。

int validateMove(int x1 , int y1)
{
    int a , b;
    printf( "Available coordinates to send the piece are: \n" ) ;

    a=1, b=1;

    while(board[x1-a][y1+b] == ' ')
    {
        if((x1-a)==-1 || (y1+b)==8) 
            break;
        printf("%d%d , ", x1-a , y1+b);
        a++;
        b++;
    }

    a=1 , b=1;

    while(board[x1+a][y1-b] == ' ')
    {
        if((x1+a)==8 || (y1-b)==-1) 
            break;
        printf("%d%d , ", x1+a, y1-b);
        a++;
        b++;
    }

    a=1 , b=1;

    while(board[x1+a][y1+b] == ' ')
    {
        if((x1+a)==8 || (y1+b)==8) 
            break;
        printf("%d%d , ",x1+a, y1+b);
        a++;
        b++;
    }

    a=1;
    b=1;

    while(board[x1-a][y1-b] == ' ')
    {
        if((x1-a)==-1 || (y1-b)==-1) 
            break;
        printf("%d%d , ", x1-a, y1-b);
        a++;
        b++;
    }

}
ftf50wuq

ftf50wuq1#

您只提供了一个代码片段,因此尚未进行测试。validateMove()不返回任何内容,因此我将返回类型从int更改为void。考虑为您的幻值' '引入一个常量,例如:

#define EMPTY ' '

我会提取一个函数,而不是重复4次。returnbreak的合适替代:

void validateMoveHelper(int x1, int y1, int af, int bf, int v, int v2) {
    for(int a = 1, b = 1; board[x1 + af * a][y1 + bf * b] == ' '; a++, b++) {
        if((x1 + af * a) == v || (y1 + bf * b) == v2)
            return;
        printf("%d%d , ", x1 + af * a , y1 + bf * b);
    }
}

void validateMove(int x1, int y1) {
    printf( "Available coordinates to send the piece are: \n" ) ;
    validateMoveHelper(x1, y1, -1, -1,  1,  8);
    validateMoveHelper(x1, y1,  8,  1, -1, -1);
    validateMoveHelper(x1, y1,  8,  1,  1,  8);
    validateMoveHelper(x1, y1, -1, -1, -1, -1);
}

然后我将这4行4个值提取到一个表t中,并在一个循环中运行它。

void validateMoveHelper(int x1, int y1, int t[4]) {
    for(int a = 1, b = 1; board[x1 + t[0] * a][y1 + t[1] * b] == ' '; a++, b++) {
        if((x1 + t[0] * a) == t[2] || (y1 + t[1] * b) == t[3])
            return;
        printf("%d%d , ", x1 + t[0] * a , y1 + t[1] * b);
    }
}

void validateMove(int x1, int y1) {
    printf( "Available coordinates to send the piece are: \n" ) ;
    int t[][4] = {
        {-1, -1,  1,  8},
        { 8,  1, -1, -1},
        { 8,  1,  1,  8},
        {-1, -1, -1, -1}
    };
    for(int i = 0; i < sizeof t / sizeof *t; i++)
        validateMoveHelper(x1, y1, t[i]);
}

相关问题