現在パズルゲームを製作中で、以下の状態に躓いています。
パズルゲームの規則
1.数種類の色のブロックが10x10でボードの上に存在する
2.上下左右に列(行)ごとブロックを動かすことができる
3.任意のブロックをクリックする事でブロックを消去できる
4.ブロックを消去すると、その上にあるブロックが落ちてくる
1、2、4の実装は問題なくできました。
そして3のブロックの消去なのですが
このブロックの消去も一定の条件を設けようと思ってます。
条件
・同じ色のブロックが複数並んでいる
・その複数のブロックが四角になっていること
・四角からはぶかれた同じ色のブロックは消さずに残す
以上です。
補足として、複数のブロックは四角になっていれば消せるので、
2x2、2x3、3x3...等、色々な四角に対応させたいです。
この四角になっていることを調べるためのアルゴリズムに苦戦しています。
地道に同じ色を探すようなアルゴリズムでは工夫が見られないので
繰り返しを用いた、できるだけ短いコードにしたいと思ってます。
何か良い方法はないでしょうか?
パズルゲームのアルゴリズム
Re: パズルゲームのアルゴリズム
その条件では、このようなブロックの並びの場合にどのように四角形と判定されるのでしょうか
- 添付ファイル
-
- block.png (2.07 KiB) 閲覧数: 2191 回
-
Butler
Re: パズルゲームのアルゴリズム
説明不足で申し訳ないです><
ブロック消去の条件で
・最低4個(2x2)から
もお願いします
また、↓のような時
□□□
□■□
□□
(全て同じ色、塗りつぶされているのがクリックするマス)
3x3は成立していないので
一番大きい、上2段の 3x2 を消去します。
アルゴリズム上、
おそらく上の3x2が先に判定されると思います。
そのため上の3x2のみで、右の2x3の四角は放置にしたいと思います。
代わりに、
□□□
□□□
■□
このように下のマスをクリックした場合は、
クリックした箇所を使用している右の 2x3 を消去します。
アルゴリズムが複雑になってしまう場合はシステムの変更も考えてます。
追加の条件を合わせた全ての条件さえ成立していれば
どのようなシステムでも問題ないかと思います
わかりにくいかもしれませんが、よろしくお願いします><
ブロック消去の条件で
・最低4個(2x2)から
もお願いします
また、↓のような時
□□□
□■□
□□
(全て同じ色、塗りつぶされているのがクリックするマス)
3x3は成立していないので
一番大きい、上2段の 3x2 を消去します。
アルゴリズム上、
おそらく上の3x2が先に判定されると思います。
そのため上の3x2のみで、右の2x3の四角は放置にしたいと思います。
代わりに、
□□□
□□□
■□
このように下のマスをクリックした場合は、
クリックした箇所を使用している右の 2x3 を消去します。
アルゴリズムが複雑になってしまう場合はシステムの変更も考えてます。
追加の条件を合わせた全ての条件さえ成立していれば
どのようなシステムでも問題ないかと思います
わかりにくいかもしれませんが、よろしくお願いします><
Re: パズルゲームのアルゴリズム
ここがよく分かりません。Butler さんが書きました: アルゴリズム上、
おそらく上の3x2が先に判定されると思います。
そのため上の3x2のみで、右の2x3の四角は放置にしたいと思います。
このような配置で右下をクリックした場合どうなるのでしょうか?
- 添付ファイル
-
- block2.png (1.3 KiB) 閲覧数: 2169 回
-
Butler
Re: パズルゲームのアルゴリズム
自分で考えてみた限りでは、
クリックしたブロックを中心にして探索する方法を思いついたのですが・・・
□□
□□
□□□
□□□□
□□□□□□
□□□□□■
これだけ大きく、対象になった時の対処法はわからないです><
自分の思いついたものだと、一番大きな四角を選出できないようですしorz
この場合だと一番大きいのは3x5か5x3になるのですが
それを導き出すのにどうすべきかもわからない状態です・・・
クリックしたブロックを中心にして探索する方法を思いついたのですが・・・
□□
□□
□□□
□□□□
□□□□□□
□□□□□■
これだけ大きく、対象になった時の対処法はわからないです><
自分の思いついたものだと、一番大きな四角を選出できないようですしorz
この場合だと一番大きいのは3x5か5x3になるのですが
それを導き出すのにどうすべきかもわからない状態です・・・
-
Butler
Re: パズルゲームのアルゴリズム
列を除外・・・
除外なんて全く思いつきませんでした><
ありがとうございます!
参考にさせてもらいますね!
他の方法も募集するので未解決にしておきますー
除外なんて全く思いつきませんでした><
ありがとうございます!
参考にさせてもらいますね!
他の方法も募集するので未解決にしておきますー