类似于俄罗斯方块的Applet使用Stacks - 弹出顶部

时间:2012-10-04 22:36:46

标签: java stack tetris

所以在我的课堂上,我们正在使用简单的俄罗斯方块,就像Java中的applet一样。块从屏幕顶部落入6个不同的列,每个不同的列是堆栈。为了获得积分,您必须在堆叠的最顶部水平地将3个或更多相同颜色的块直接相互匹配。所以只有堆栈的顶部才能匹配。如果匹配3个或更多块,则必须将它们删除(也就是pop()'d off)。您可以将具有相邻块的块切换到右侧或左侧(从而生成更大的组合)。不过这是我的问题。我的问题涉及检查3个或更多块(彼此相邻)是否匹配颜色。我必须记住的是列数可能增加的可能性。我不是说它会在程序运行时增加,只是我必须练习正确的技术,并确保我正在接近这个问题作为一种可能性。据说有一个成员变量代表列数,恰当地命名为numCols。

所以如果有人能给我一个正确的方向来解决这个问题请。同样,问题是:能够编写一个方法removeCombos(),它可以水平地检查一行中相同颜色的3个或更多块(跨越堆栈的顶部)并删除它们。我想自己编写代码,这就是为什么我这里没有提供任何代码。除非你有什么需要看,然后我可以提供一些,但它正在使用基本的堆栈类及其泛型方法,pop(),peek(),contains(),isEmpty(),以及它内部的迭代器类。堆栈类。

如果我不清楚,我会提前道歉,请让我澄清需要的地方。非常感谢你。

2 个答案:

答案 0 :(得分:1)

您要做的是将Stack作为数组:

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.
    }
}

答案 1 :(得分:0)

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

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

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

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

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