2

タイルがランダムな色で塗りつぶされ、ユーザーがタイルをクリックすると消えるタイルベースのゲームを作成しようとしています。これは私がすでに達成しています。

ここに画像の説明を入力

今、私がやりたいのは、隣接する 2 つ以上のタイルが同じ色の場合にのみ、タイルが消えることです。フラッド フィル アルゴリズムを使用してタイルを破壊しました。一部のカウント値が 2 より大きい場合にのみ機能するように、このコードを変更するにはどうすればよいですか。

これはタイルを破壊するコードです:

 private void Destroy(int x,int y,int old_Value,int new_Value)
    {
        if (GameArr[x,y].BlockValue == old_Value)
        {
            //if some count > 2 then only
            GameArr[x, y].BlockValue = 0;

            Destroy(x + 1, y, old_Value, new_Value);
            Destroy(x - 1, y, old_Value, new_Value);
            Destroy(x, y + 1, old_Value, new_Value);
            Destroy(x, y - 1, old_Value, new_Value);

        }
    }

このカウント値を取得するにはどうすればよいですか?

  • メソッド自体に count 変数を渡し、値が 2 を超えているかどうかを確認してから破棄すると、最初の 2 つのタイルは破棄されません。
  • タイルが破棄可能かどうかを確認する別の方法を作成すると、カウント中に blockValues が 0 に設定されます。

どうすればこれを行うことができますか。どんな助けでも大歓迎です。

4

1 に答える 1

1

さて、私は私の答えを見つけました。

Destroy メソッドを呼び出す前にカウント値をチェックする必要がありました

if (GameArr[i - 1, j].BlockValue == old_Value) count++;
       if (GameArr[i, j - 1].BlockValue == old_Value) count++;
       if (GameArr[i + 1, j].BlockValue == old_Value) count++;
       if (GameArr[i, j + 1].BlockValue == old_Value) count++;

       if(count>2)
            Destroy(i, j,GameArr[i,j].BlockValue,0);
于 2013-05-14T07:38:36.900 に答える