2012-10-04 45 views
0

因此,在我的課堂上,我們正在開發一個簡單的Tetris,如Java中的applet。塊從屏幕頂部落入6個不同的列,每個不同的列是堆棧。爲了獲得積分,您必須在堆疊的頂部水平排列彼此相鄰的3個或更多相同顏色的塊。所以只有堆棧的頂部可以匹配。如果你匹配3個或更多的塊,他們必須被刪除(aka pop()'d off)。您可以將相鄰塊的塊切換到右側或左側(從而生成更大的組合)。但是,這是我的問題。我的問題涉及檢查3個或更多塊(彼此相鄰)是否匹配顏色。我必須記住的是列數可能增加的可能性。我並不是說程序運行時它會增加,只是我必須練習正確的技巧,並確保我將這個問題作爲一種可能性來處理。這就是說有一個成員變量,表示列的數量,恰當地命名爲numCols。使用堆棧的類似Tetris的Applet - 彈出頂部

所以,如果任何人都可以給我一個正確的方向推動解決這個問題,請。再次,問題是:能夠編寫一個方法removeCombos()來檢查一行中相同顏色的3個或更多塊,並橫向排列(跨棧頂部)並將其刪除。我想自己編寫代碼,這就是爲什麼我沒有在這裏提供任何代碼。除非你需要看到什麼,那麼我可以提供一些,但是它與基本的堆棧類及其泛型方法,pop(),peek(),contains(),isEmpty()以及一個迭代器類一起工作堆棧類。

如果我以任何方式不清楚,我提前道歉,請讓我澄清需要的地方。非常感謝你。

+0

「堆棧」這個詞有幾個含義,一個是作爲遊戲的概念,其中塊彼此堆疊,並且有數據結構堆棧和實現它的Java類堆棧。是否需要使用Java Stack類? – Meier

回答

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

int col代表什麼? – Mike

+1

哦,我看到它的顏色。 – Mike

+0

啊,是的,cols和顏色,我的壞,固定。 – CrazyCasta

0

我認爲棧的數組讓這個任務變得更加困難。如果我們有一個例子:

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

然後在每個堆棧的頂部,我們有十色,但我知道俄羅斯方塊,他們不應該被刪除。

所以你需要某種數據結構,你可以更直接地訪問行。可能的解決方案是 1.數組陣列 2.或一組向量。

向量使得在中間移除元素更容易,但在另一方面,您需要處理的是向量未填充到要檢查的行時。