0

私のクラスでは、Java でアプレットのような単純な Tetris を扱っています。ブロックは画面の上部から 6 つの異なる列に落ち、それぞれの異なる列はスタックです。ポイントを獲得するには、同じ色の 3 つ以上のブロックをスタックの一番上で水平方向に並べて一致させる必要があります。したがって、スタックの一番上のみが一致します。3 つ以上のブロックに一致する場合は、それらを削除する必要があります (別名 pop() をオフにします)。隣接するブロックでブロックを右または左に切り替えることができます (したがって、より大きなコンボが生成されます)。しかし、それは私の問題です。私の問題は、(互いに隣接している) 3 つ以上のブロックの色が一致しているかどうかを確認することです。注意しなければならないのは、列の数が増える可能性があるということです。プログラムを実行すると増加すると言っているのではありません。適切なテクニックを練習し、可能性としてこの問題にアプローチしていることを確認する必要があります。そうは言っても、numCols という適切な名前の列数を表すメンバー変数があります。

ですから、誰かがこの問題を解決するための正しい方向に私を押してくれるなら、どうぞ。繰り返しになりますが、問題: 水平方向 (スタックの上部) に同じ色の 3 つ以上のブロックが並んでいるかどうかをチェックし、それらを削除する removeCombos() メソッドを記述できることです。自分でコードを書きたいので、ここではコードを提供していません。あなたが見る必要があるものがない限り、私はいくつかを提供することができますが、基本的なスタッククラスとそのジェネリックメソッド、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 に答える