C++ 俄罗斯方 block : A function that deletes lines

标签 c++ tetris

我一直在研究这个俄罗斯方 block 教程,并且遇到了删除行并将行降低一级的功能。我有点理解这些功能是怎么回事,但有些部分让我感到困惑。我会尽力解释它,但如果您需要,这里是类(class)的链接:http://javilop.com/gamedev/tetris-tutorial-in-c-platform-independent-focused-in-game-logic-for-beginners/

对我来说,这看起来像是一个让数组从一行的最后一个数字开始的函数:

void Board::DeleteLine (int pY)
{
    // Moves all the upper lines one row down
    for (int j = pY; j > 0; j--)
    {
        for (int i = 0; i < BOARD_WIDTH; i++)
        {
            mBoard[i][j] = mBoard[i][j-1];
        }
    }   
}

然后是导致我出现问题的函数,我将对此进行解释:

void Board::DeletePossibleLines ()
{
    for (int j = 0; j < 20; j++)
    {
        int i = 0;
        while (i < 10)
        {
            if (mBoard[i][j] != 1) break;
            i++;
        }

        if (i == 10) DeleteLine (j);
    }
}

如果您不熟悉,这里的想法是删除完全由 1 组成的行。但是 if (mBoard[i][j] != 1) break; 会在第一行不是 1 时停止循环。如果 break 阻止它做任何可能的事情,循环将如何到达 mBoard[][] 数组中间某处的 1马上?

我是不是漏掉了什么?这是我对它的解读。也许有人看到了我没有看到的东西?

编辑:

感谢回复,感激不尽。

最佳答案

你也可以这样构造代码:

for (int j = 0; j < 20; j++)
{
 int i = 0;
    while (i < 10)
    {
        if (mBoard[i][j] != 1) 
        {
            break; //only breaks the while loop and will continue with if (i == 10)
        }
        else 
        {
            i++;
        }
    }

    if (i == 10)
    {
        DeleteLine (j);
    }
}

现在您可以清楚地看到,break; 只是中断您的 while 循环,而不是您的 for 循环。

关于C++ 俄罗斯方 block : A function that deletes lines,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25302688/

相关文章:

c++ - 在 C++ 中求解二次方程

c++ - 在 STL 容器中发布 opencv 图像?

java - 俄罗斯方 block 程序的 GUI 出现故障

python - 俄罗斯方 block 计时问题

java - 为什么要创建一个新对象 - Java 俄罗斯方 block 教程

c++ - 如何在 WAF 中构建静态库?

c++ - Poco websocket 服务器示例

c++ - 在 C++ 的可变长度函数中,将默认值参数放在何处?

c++ - 如何使用 gotoxy 函数代替 clrscr

c# - 俄罗斯方 block 游戏的朴素重力使用 2D 阵列作为运动场