所以在我的课堂上,我们正在使用简单的俄罗斯方块,就像Java中的applet一样。块从屏幕顶部落入6个不同的列,每个不同的列是堆栈。为了获得积分,您必须在堆叠的最顶部水平地将3个或更多相同颜色的块直接相互匹配。所以只有堆栈的顶部才能匹配。如果匹配3个或更多块,则必须将它们删除(也就是pop()'d off)。您可以将具有相邻块的块切换到右侧或左侧(从而生成更大的组合)。不过这是我的问题。我的问题涉及检查3个或更多块(彼此相邻)是否匹配颜色。我必须记住的是列数可能增加的可能性。我不是说它会在程序运行时增加,只是我必须练习正确的技术,并确保我正在接近这个问题作为一种可能性。据说有一个成员变量代表列数,恰当地命名为numCols。
所以如果有人能给我一个正确的方向来解决这个问题请。同样,问题是:能够编写一个方法removeCombos(),它可以水平地检查一行中相同颜色的3个或更多块(跨越堆栈的顶部)并删除它们。我想自己编写代码,这就是为什么我这里没有提供任何代码。除非你有什么需要看,然后我可以提供一些,但它正在使用基本的堆栈类及其泛型方法,pop(),peek(),contains(),isEmpty(),以及它内部的迭代器类。堆栈类。
如果我不清楚,我会提前道歉,请让我澄清需要的地方。非常感谢你。
答案 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.或一组向量。
向量可以更容易地删除中间的元素,但在另一方面,您需要处理当向量未填充到您要检查的行时。