ページ 11

パズルゲームのアルゴリズム

Posted: 2012年12月22日(土) 18:42
by Butler
現在パズルゲームを製作中で、以下の状態に躓いています。

パズルゲームの規則
1.数種類の色のブロックが10x10でボードの上に存在する
2.上下左右に列(行)ごとブロックを動かすことができる
3.任意のブロックをクリックする事でブロックを消去できる
4.ブロックを消去すると、その上にあるブロックが落ちてくる

1、2、4の実装は問題なくできました。

そして3のブロックの消去なのですが
このブロックの消去も一定の条件を設けようと思ってます。

条件
・同じ色のブロックが複数並んでいる
・その複数のブロックが四角になっていること
・四角からはぶかれた同じ色のブロックは消さずに残す

以上です。

補足として、複数のブロックは四角になっていれば消せるので、
2x2、2x3、3x3...等、色々な四角に対応させたいです。

この四角になっていることを調べるためのアルゴリズムに苦戦しています。

地道に同じ色を探すようなアルゴリズムでは工夫が見られないので
繰り返しを用いた、できるだけ短いコードにしたいと思ってます。

何か良い方法はないでしょうか?

Re: パズルゲームのアルゴリズム

Posted: 2012年12月22日(土) 19:31
by h2so5
その条件では、このようなブロックの並びの場合にどのように四角形と判定されるのでしょうか

Re: パズルゲームのアルゴリズム

Posted: 2012年12月22日(土) 19:49
by Butler
説明不足で申し訳ないです><

ブロック消去の条件で
・最低4個(2x2)から
もお願いします

また、↓のような時

□□□
□■□
 □□
(全て同じ色、塗りつぶされているのがクリックするマス)

3x3は成立していないので
一番大きい、上2段の 3x2 を消去します。

アルゴリズム上、
おそらく上の3x2が先に判定されると思います。
そのため上の3x2のみで、右の2x3の四角は放置にしたいと思います。

代わりに、

□□□
□□□
 ■□

このように下のマスをクリックした場合は、
クリックした箇所を使用している右の 2x3 を消去します。


アルゴリズムが複雑になってしまう場合はシステムの変更も考えてます。

追加の条件を合わせた全ての条件さえ成立していれば
どのようなシステムでも問題ないかと思います



わかりにくいかもしれませんが、よろしくお願いします><

Re: パズルゲームのアルゴリズム

Posted: 2012年12月22日(土) 20:14
by h2so5
Butler さんが書きました: アルゴリズム上、
おそらく上の3x2が先に判定されると思います。
そのため上の3x2のみで、右の2x3の四角は放置にしたいと思います。
ここがよく分かりません。
このような配置で右下をクリックした場合どうなるのでしょうか?

Re: パズルゲームのアルゴリズム

Posted: 2012年12月22日(土) 20:51
by Butler
自分で考えてみた限りでは、
クリックしたブロックを中心にして探索する方法を思いついたのですが・・・
    □□
    □□
   □□□
  □□□□
□□□□□□
□□□□□■

これだけ大きく、対象になった時の対処法はわからないです><
自分の思いついたものだと、一番大きな四角を選出できないようですしorz

この場合だと一番大きいのは3x5か5x3になるのですが
それを導き出すのにどうすべきかもわからない状態です・・・

Re: パズルゲームのアルゴリズム

Posted: 2012年12月22日(土) 21:30
by h2so5
無駄は多いかもしれませんが、とりあえず思いついた方法を。

Re: パズルゲームのアルゴリズム

Posted: 2012年12月23日(日) 09:25
by Butler
列を除外・・・
除外なんて全く思いつきませんでした><
ありがとうございます!
参考にさせてもらいますね!

他の方法も募集するので未解決にしておきますー