0

所以在我的课堂上,我们正在用 Java 编写一个简单的俄罗斯方块,比如小程序。块从屏幕顶部落入 6 个不同的列,每个不同的列是一个堆栈。为了得分,你必须匹配 3 个或更多相同颜色的块,它们在堆栈的最顶部水平相邻。所以只有栈顶可以匹配。如果匹配 3 个或更多块,则必须删除它们(又名 pop()'d off)。您可以将块与相邻块切换到右侧或左侧(从而生成更大的组合)。然而,这是我的问题。我的问题涉及检查 3 个或更多块(彼此相邻)是否颜色匹配。我必须记住的是列数可能会增加。我并不是说程序运行时它会增加,它' s 只是我必须练习适当的技术,并确保我有可能解决这个问题。话虽如此,有一个代表列数的成员变量,恰当地命名为 numCols。

因此,如果有人可以在正确的方向上推动我解决这个问题,请。同样,问题是:能够编写一个方法 removeCombos() 来水平检查一行中的 3 个或更多相同颜色的块(在堆栈顶部)并删除它们。我想自己写代码,所以这里没有提供任何代码。除非您需要查看某些内容,否则我可以提供一些内容,但它与基本堆栈类及其泛型方法 pop()、peek()、contains()、isEmpty() 以及迭代器类一起使用堆栈类。

如果我有任何不清楚的地方,我会提前道歉,并请我在需要的地方澄清一下。非常感谢。

4

2 回答 2

1

你想要做的是将你Stack的 s 作为一个数组:

protected Stack[] stacks;

protected removeCombos()
{
    int color;
    for(int i = 0; i < stacks.length; ++i)
    {
        color = stacks[i].peek();
        for(int j = 1; (i+j) < stacks.length; ++j)
            if(stacks[i+j].peek() != color)
                break;

        // j is now the number of contiguous blocks of the same color.
    }
}
于 2012-10-04T22:42:47.953 回答
0

我认为一系列堆栈使这项任务更加困难。如果我们有一个例子:

.....
..X..
.XOX.
XOXOX

然后在每个堆栈的顶部,我们有颜色 X。但据我所知俄罗斯方块,它们不应该被删除。

因此,您需要某种可以更直接地访问行的数据结构。可能的解决方案是 1. 数组数组 2. 或向量数组。

向量可以更轻松地删除中间的元素,但另一方面,当向量未填充到您正在检查的行时,您需要处理。

于 2012-10-09T20:28:14.177 回答