变量似乎并没有改变2048游戏c ++

问题描述 投票:0回答:1

在按键上,这是定义的/称为(假设按键被按下)该顺序应该显示出应该发生的情况,以及在整个按键结果中如何附加didMove,但是,这在理论上不起作用(在gif中仅按下https://i.imgur.com/wZcHsOe.gifv时,此gif显示了问题,仅当按下向下且没有移动或合并图块时,才应添加图块,因此,Move应该移动=假;但是它仍然输入if语句,就好像它仍然为True

有关didMove = true的条件部分在addValue函数中

void Grid::shiftDown(){
    didMove = false;
    moveDown();
    mergeDown();
    moveDown();
    if(didMove == true){
        moves = moves + 1;
    }
    addValue();
}

这是MoveDown / MergeDown函数

void Grid::moveDown(){
    for(int x = 0; x < tilesWide; x++){
        for(int y = tilesHigh - 1; y > 0 ; y--){
            if( grid[x][y] == emptyCell){

                for(int t = y-1; t >= 0; t--){
                    if(grid[x][t] != emptyCell){  

                        grid[x][y] = grid[x][t];
                        grid[x][t] = emptyCell;
                        didMove = true;
                        break;
                    }
                }
            }
        }
    }
}

void Grid::mergeDown(){
    for(int x = 0; x < tilesWide; x++){
        for(int y = tilesHigh-1; y > 0; y--){

            if(grid[x][y] == grid[x][y-1]){
                grid[x][y] = (grid[x][y] *2);
                grid[x][y-1] = emptyCell;
                setScore(grid[x][y]);
                didMove = true;
            }
        }
    }  
}

并且如果didMove == true,这是一个添加图块的函数

void Grid::addValue(){

    int value = Grid::randValue();
    bool emptyCells = false;

    for(int x = 0; x < tilesWide; x++){
        for(int y = 0; y < tilesHigh; y++){
            if(grid[x][y] == emptyCell){
                emptyCells = true;
            }
        }
    }

    while(emptyCells == true){
        int valX = rand() % tilesWide;
        int valY = rand() % tilesHigh;

        if (grid[valX][valY] == emptyCell) {

            if(didMove == true){
                grid[valX][valY] = value;
                didMove = false;
                emptyCells = false;
                break;
            }
            else{
                emptyCells = false;
                break;
            }
        }
    }
}
c++ boolean
1个回答
0
投票

您在问题中声明只有在didMove == true时才调用addValue()。但是,您对addValue()的调用是在if(didMove == true){}条件块之后进行的。

根据您对问题的描述,对addValue()的调用肯定应该在该条件块内。

void Grid::shiftDown(){
    didMove = false;
    moveDown();
    mergeDown();
    moveDown();
    if(didMove == true){
        moves = moves + 1;
        addValue();   //Moved to inside conditional block.
    }
    //addValue();     //Would always run here regardless of condition evaluation.
}
© www.soinside.com 2019 - 2024. All rights reserved.