0

我花了几天时间编写 2048 游戏。而现在我做了大部分功能,只有一个,测试游戏是否结束。为了编写这个游戏,我的想法是首先将相同的数字与函数合并up(down, left or right)_merge,并使所有数字都转到用户使用函数按下的箭头方向all_go_up(down, left or right)add_new_number然后使用该功能添加一个新号码。

这是我上面提到的一些代码:

void up_merge()
{
    for(int i = 1; i < 4; i++) {
        for(int j = 0; j < 4; j++) {
            if(grid[i][j] > 0 && grid[i - 1][j] == grid[i][j]) {
                while(grid[i - 1][j] == grid[i][j]) {
                    grid[i - 1][j] *= 2;
                    grid[i][j] = 0;
                }

            }
            else if(grid[i][j] > 0 && grid[i - 1][j] == 0 && grid[i - 2][j] == grid[i][j]) {
                while(grid[i - 2][j] == grid[i][j]) {
                    grid[i - 2][j] *= 2;
                    grid[i][j] = 0;
                }

            }
            else if(grid[i][j] > 0 && grid[i - 1][j] == 0 && grid[i - 2][j] == 0 && grid[i - 3][j] == grid[i][j]) {
                while(grid[i - 3][j] == grid[i][j]) {
                    grid[i - 3][j] *= 2;
                    grid[i][j] = 0;
                }

            }
        }
    }
}

void all_go_up()
{
    for(int i = 3; i > 0; i--) {
        for(int j = 0; j < 4; j++) {
            if(grid[i][j] > 0 && grid[i - 1][j] == 0) {
                grid[i - 1][j] = grid[i][j];
                grid[i][j] = 0;
            }
            for(int k = 3; k > 0; k--) { 
                if(grid[k][j] > 0 && grid[k - 1][j] == 0) {
                    grid[k - 1][j] = grid[k][j];
                    grid[k][j] = 0;
                }
            }
        }
    }
}

bool add_new_number(int num)
{
    int n = rand() % 2 + 1; 
    int newnumber = 1 << n; 
    int r, c;
    switch(num) {
    case 1: //up
        r = rand() % 2 + 2;
        c = rand() % 4;
        break;
    case 2: //down
        r = rand() % 2;
        c = rand() % 4;
        break;
    case 3: //left
        r = rand() % 4;
        c = rand() % 2 + 2;
        break;
    case 4: //right
        r = rand() % 4;
        c = rand() % 2;
        break;
    }
    do {
        if(check_empty() == 1) {
            if(grid[r][c] == 0) {
                grid[r][c] = newnumber;
                return false;
            }
            if(grid[r][c] != 0) {
                switch(num) {
                case 1: //up
                    r = rand() % 2 + 2;
                    c = rand() % 4;
                    break;
                case 2: //down
                    r = rand() % 2;
                    c = rand() % 4;
                    break;
                case 3: //left
                    r = rand() % 4;
                    c = rand() % 2 + 2;
                    break;
                case 4: //right
                    r = rand() % 4;
                    c = rand() % 2;
                    break;
                }
            }
        }
        else {
            return false;
        }

    } while(true);
}

我还有一些其他功能可以检查网格是否已满等。我也尝试过使用一些while()for()做到这一点。但是我不知道我在哪里写错了代码来测试游戏是否结束。

我希望我能很好地表达我的问题。希望在test_fail不更改太多代码的情况下获得一些对函数进行编码的建议。谢谢。

4

0 回答 0