我々は賢いので。

かんとーちほーのエンジニアの、仕事とか、趣味とか、いろいろなはなし。

【パズドラ】パズルに於ける閉区間理論

皆さん、火てな降臨*1お疲れ様でした!! まだクリアしてなくてこれから駆け込みでやると言う方は頑張ってください(`・ω・´)ゞ

f:id:sugaryo1224:20170806141125j:plain


と言う事で、今日はぼくが大好きなソシャゲ「パズル&ドラゴンズ」に於いて、普段意識している「閉区間理論」を説明してみます。

区間理論

3・3・1の基本形

まずはともあれ、基本形となる「3個・3個・1個」のケースを説明してみます。

任意の2色3個ずつ合計6個のドロップと、持って操作するドロップ1個、合計7個が作る「連続領域」を考える。

この領域内で、

  1. 消したい2色のうち1色を揃える(この時、もう一つの色は見ない)
  2. 1色を揃えたらそのまま着地点を目指す

これで2色揃います*2

と、別に当たり前の事を改めて書いただけなんですが、文章を読んでも良く解らないと思います。 ぼくも文章を書いてて良く解りませんでした。

ので、画像で説明します。

1.領域の初期状態

火3個、光3個、操作ドロップは何でも良いんで解り易くお邪魔を置きました。 周りの回復ドロップの所は今は考えない「領域外」です。

f:id:sugaryo1224:20170805202634p:plain

スタート位置で接している火ドロップを左端に縦に並べる事を考えます。

2.火ドロップを揃えます

右に進んでくるっと回して火を揃えるとこの状態になります。

f:id:sugaryo1224:20170805202854p:plain

3.そのまま着地点を目指します

すると「結果的に」光も揃ってしまいます。

f:id:sugaryo1224:20170805202951p:plain

まぁ、当然の事ですよね。

お邪魔が最終的にいなくなる6個の領域で、左側3個を火が占めているのだから、消去法で右側3個は全部光になる。

(*‘▽’)なにをあたりまえなことを!!

考え方の説明

基本形の説明では端折りましたが、きちんと「消す」には領域の形どりと、並べるドロップの配置決めが重要になります。

この時の考え方は以下のようになります。

  • 消すべき3個3個の作る6つの領域は「矩形*3」である事。
    つまり、7つの領域は「矩形+着地点」と言う構造になっている。(領域の形どり)
  • 着地点に位置する色のドロップは「見ない方の色」にする。
    着地点に無い方の色を端に揃えて、そのまま着地点に抜けるルートを選ぶ。(配置決め)

先の基本形の画像で説明すると、

  • 右下の光が着地点になる。
  • 着地点が光なので、光を見ない。
  • 光を見ないので、火を揃えたい。
  • 左端に火を揃えて、着地点に抜ける。

となります。

この考え方による利点

この考え方でやると、領域内で「二色並べる」のではなく「一色並べて後は一直線」なので、気持ち的にドロップ操作が早いです。

且つ、このやり方は「特定の領域内だけを移動するので、他の領域のドロップを弄らず、盤面を汚さない」と言う利点があります。

この為、領域と領域を個別に考える事が出来る*4ので、長考してルートを探るのに良く、指の短い*5パーティで役立ちます。

領域と領域を繋いでいく

後は、ある領域の着地点を、次の領域のスタート地点と見做して、同じ思考を繰り返していくだけです。

先の基本形の着地点を含めて更に2色、水と木の領域を考えてみます。

例えばこんな状態。

f:id:sugaryo1224:20170805205615p:plain

同じ思考を繰り返して、

  • 右上の所が着地点。
  • 着地点には水がある。
  • 水を見ないので木を揃えて、着地点に抜ける。

f:id:sugaryo1224:20170805205828p:plain

こうなって、

f:id:sugaryo1224:20170805210341p:plain

こうなりますね。

初期状態から全部繋げると

こうなります。

f:id:sugaryo1224:20170805210407p:plain

f:id:sugaryo1224:20170805210418p:plain

(*‘▽’)こんなルート

※実際には盤面の使い方が悪いからここで横に置く事はしないと思うけどね

区間理論・応用編

基本形では3個3個と操作ドロップの7個の領域でしたが、これを3個3個3個1個で10個の領域で考えたりします。 3・3・3・1の10だと、「2色揃えて着地点に抜ければ、最後の3色目も揃ってる」理論になりますね。

3・3・3・1の例

例えば、火水光でこんな盤面だった場合。

f:id:sugaryo1224:20170806140435p:plain

考え方としてはこんな感じですね。

  • 左上の火の位置が着地点。
  • 着地点が火なので火を見ない。(下に2個あるけど、それでも火を見ない)
  • 水と光はどっちを選んでも良いけど、ぼくは光を下に組む事にします。

という事で、一番下に光を組み、その上に水を組んだら、何も考えずに着地点を目指して、結果的に火が組まれる筈です。

f:id:sugaryo1224:20170806142129p:plain

つまり、こんなルートですね。

火は意識せず、他の色を揃える事で勝手に上に上がっていく、プログラムに置けるバブルソート*6みたいな動きが面白いですね。

まとめ

このように、領域のサイズを広げていくとか、個数や配置に合わせて単純な矩形じゃなく別な形 *7 にして領域を考えるなど、盤面状況やパーティ編成に合わせて微調整します。

更に、領域内で落としを組んでみるとか、うぇい重視のパーティなので4個4個1個の9個で領域区切ってみるとか。

参考

ドロップ配置の画像は、皆さんご存知のパズドラ定石メーカーで作りました。

パズドラ 定石メーカー

*1:イベントダンジョン「緋炎の雲海都市」

*2:当然、領域の形によっては消えない並びで3個並ぶ事になるので、領域の形どりと配置には注意が必要

*3:四角形の事

*4:領域と領域が独立しており、それぞれが区間的に閉じている、と言う意味で閉区間理論と呼んでます

*5:操作時間延長が少なく、ドロップ操作時間が短い

*6:バブル=泡。水中を泡が登っていくようにソートされる事からバブルソートと名付けられた、整列アルゴリズムのひとつ。

*7:大きなL字型とか。いわゆる名人エルモア式、下二段平積みからの上三段を縦置きするスタイルなど、最終形に合わせて領域の形を調整する

広告を非表示にする