关于在2048年游戏中检查游戏是否结束的功能

时间:2017-09-07 15:12:36

标签: c++ 2048

我花了几天时间来代码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函数,而不会改变太多的代码。感谢。

0 个答案:

没有答案