水玉潰しのその後

いまだに懲りずに
水玉潰し 旧作品No.22468 | pya! (ネタサイト)
をやっているわけです。
↓ちなみに「SPLASH BACK」っていうのが正式名称のようで。
アニメ専門チャンネル | カートゥーン ネットワーク - 海外アニメと無料ゲームや動画なら Cartoon Network


んで、最近[pya!]の方で

中心の4マスを最大にして一気に消すを基本にすれば結構行きます。ここが空のもしくは小さい時はなかなか進みません。

っていう書き込みがあったんで実践してみたらスゴイ効果で。
とりあえず自己ベストをレベル30まで伸ばせた。


で、こうなったら前に作ったプログラムを改良してこのアルゴリズムを組み込めば結構スゲーのが出来るんじゃない?
と思って作ろうと思ったんだけど。
やはり問題が。
簡単な状態ならいいんだけど、水玉が密集しているときの計算が難しい。
あと一発で潰れる状態の、最大の水玉に対し、2方向から同時に水玉がぶつかる場合。
例えば2×2マスの空間がすべて最大の状態の水玉のときに、どれかを潰した場合。
かならずその空間でいう対角線の位置の水玉には同時に2方向から滴が飛んでくるはずですよね。


これがどちら側が優先なのかが分からないのですよ。
例えば右側と上側の2方向から同時にぶつかる場合、右からのものを優先させる場合と上からのものを優先させる場合とがあるわけ。
「どっちでもいいじゃん」と思うかもしれないけど、意外に重要な問題。
どちらを優先させるかによって当然その後の結果も変わるわけだから。
プログラミングしようとしたら必ずその条件を組み入れないと正しい結果が出ない。


色々実験してみたところ、その場所によってどちらを優先させるかが変わるみたい。
だから、同時に2方向から滴が飛んでくる場合、6×6のフィールドにおける絶対的な位置もその結果に影響してくる。
しかもその絶対座標と優先される向きに相関というか法則が見当たらない。
まったくもってワケが分からぬ。


この辺の問題が解決しない限りプログラミングによるシミュレーションは難しいと思われる。
そこらへんまで研究・考察しているヒトはあまりいないみたいだし。
ヒマを見付けてなんとかこの法則を見破ってやる。
協力者求ム。