こんにちは、ほけきよです。
皆さんはパズドラ やったことありますか?僕は割と古参のユーザーです。ランクは720くらいです。
先日、こんな動画を観ました。
VIDEO www.youtube.com
これを観てて、そういえば、こういうの作って、コンボの実験をしてみたかったんだよなぁ。と思い出しました。なので、コンボシミュレータを自作 することにしました。
実は、さっきの動画はコンボに関しては2点の意味で正しくありません
ドロップ*1 の消え方が少しまちがっている
落とし
/落ちコン
が無い
しかし、コンボシミュレータではこれをきちんと実装する必要があります。なので、UI部分は作らず、ここのロジック部分に注力して作ってみました。
パズドラ は基本、6×5個で6種類のドロップで構成されます。
これらのドロップを3つ以上連結させることでドロップが消え、相手に攻撃ができます。
消え方
ドロップは、3つ以上連結 していると消えます。この3つ以上というのが、パズドラ では縦横一方向において、3つ以上の連結 なのです。詳しくは下図をご覧ください。
消え方の基本
パズドラ のコンボ数は、この消えたまとまりの数です。連結すると1コンボに集約されちゃうので、分けたほうがお得です*2
落としと落ちコン
ドロップを消したときに、上部にドロップが残っていると、そのドロップが落ちてきます。
そこで3つ以上のドロップが連結したら、またドロップが消えます。これを 落とし
といいます。
一回盤面内のコンボが終わると、ドロップがランダムに補充されます。ランダムに補充されたあと、3つ以上のドロップが連結したら、またドロップが消えます。これを落ちコン
といいます。
落としと落ちコンの違いは、
落としは 「狙ってできる」 ところ
落ちコンは 「完全運任せ」 なところ
です。
落とし vs 落ちコン
これらを実装していきます。
実装
まず、実際にみてもらいましょう。(※今回はUIやグラフィックは皆無なので、出力を画像で可視化してパラパラ漫画のように流しているだけです。)
シミュレータ
ドロップを消す/落とし/落ちコンを(多分)きちんと実装できました。
シミュレータの良いところは、盤面やドロップの種類を自由に設定できる ところですね。
あとでじっくりと遊びます。
実装コード自体はgithub に上げたので、詳しくはそこでみてください。
pazdra(hokemiscディレクトリ内)
をパラメータにコンボ数のシミュレーションができるので、楽しいと思います。
やってて結構悩んだのが、「消すルール」のところでした。連結 が意外に難しい。おそらくもっと簡単な方法があるはずです。*3
「大人の10コンボ」をしたい。
パズドラ だと誰でも憧れるヤツ。
大人の10コンボってなに?
ところで、パズドラ をしている方なら「マックスむらい」 さんという方を一度は聞いたことあるのではないでしょうか。
パズドラ 公式生放送に出て、我々ユーザのために石をもぎ取ってくれる存在です。パズドラ の全盛期は彼とともに作られたといっても過言ではないでしょう。
VIDEO www.youtube.com
ここで最後に言われている「みたか、これが大人の10コンボ!」 はあまりに有名なセリフです。
生放送で10コンボを組み、勝利特典の石をもぎ取ってくれる様は、まさに英雄でした。
「オトナ」の10コンボ
そんな私も、大人の10コンボをしたい!!とあこがれを抱いたのです。
しかし、パズルの練習をしたくありません。めんどくさいので。そこで考えました。
「運」だけで10コンボ行かないかなぁ。それが良いなぁ。
と思いました。私にはパズル力はありませんが、作ったシミュレータがあります。
どのくらい試行回数を積めば10コンボできるのか 、シミュレーションをしてみよう。そう思いました。
コレが 「オトナ」の10コンボ です。
しかし、通常盤面だと...
パズドラ の通常版面は、縦5マス横6マスの6色盤面です。
どのくらい落ちコンして、どのくらいのコンボ数が見込めるのか。意気揚々とシミュレータを回しました。
意気揚々と100回試行した結果の統計量はこちら
min
max
average
std
10combo
0
5
1.11
1.34829522
0
0回...100回やってもmaxは5コンボで、10コンボは0回でした。平均1コンボくらいだし...こりゃ駄目だ。
分析
こうなってくると、もっぱら気になるのはどういう盤面なら「オトナ」の10コンボを達成できるの? というところです。
コンボを増やす方法は2種類あって、
これらの施策によって、つながっているドロップが存在する確率が増えるので、自ずとコンボ数は増えていきます。
というわけで、盤面の高さ
,盤面の幅
,ドロップの種類
をパラメータにとって調べてみました。
すべての結果はgithub のpazdra_results0.csv
においてあります。
現状のパズドラ では、7×6の6色盤面、6×5の4色盤面のダンジョンもあるので、さっきの6×5盤面と比べどうなのか見てみましょう。
Height
Width
Kind
min
max
average
std
10combo
6
5
4
0
12
2.79
2.3970607
3
6
5
6
0
5
1.11
1.34829522
0
7
6
6
0
7
1.81
1.598092613
0
9
8
6
0
14
3.31
2.335358645
2
4色盤面だと、100回中3回も10コンボを達成できるっぽいです!!4色盤面ダンジョンなら、3%くらいの確率でドヤれることがわかりました。
*4
ちなみに、6色だとどのくらいの盤面の広さが必要なの?というのも気になったので調べてみました。9×8盤面で可能性が見えてくる みたいです。
ガンホー さん。実装をよろしくおねがいします
ちなみに、平均コンボ数はこんな感じ。
ドロップ盤面と種類とコンボ数の関係性
さて、ここまでシミュレーションができるようになってくると、いろいろと気になることが増えてきました。
盤面と種類とコンボ数には、なんらかの関係性があるのではないか?
実は昔、数を減らしていくと、パーコレーション起こって無限にコンボができるんじゃないのか??とか、いろいろと妄想していたことがありまして。今回はせっかくだし数値的に検証してみようと思ったわけです。
ここで、ドロップ消え方の性質上ほとんど縦横の対称性は保たれそうだったので、n×nの正方形盤面で考えることにしました。
盤面のドロップ数( )
盤面のドロップの種類( )
コンボ数
4種類から10種類までの落ちコン数の関係性をグラフにしたものがこちら。
種類には反比例して、盤面の大きさには比例しているような感じがあります。
この、直線の比例係数 が気になりますね。それが分かれば、ドロップの種類と盤面の大きさの関係性がわかるってものです。
実はこの直線の比例係数、並べてみるとめちゃくちゃキレイな関係 があるんです!
縦軸に比例係数の逆数の平方根 をとって、横軸にドロップの種類を取ると、そのグラフはこんな感じになります。
数式で表すと、比例係数 とドロップの種類 の関係は下記になります。
ドロップの大きさとコンボの関係性の比例係数は、ドロップの種類で記述できそうです。
これから、パズドラ コンボ関数 が算出できるわけです!!
パズドラ 平均コンボ関数
: ドロップの種類
: セルの数
たとえば、盤面100×100で、6種類のドロップだったら、この関数にぶち込んで
というわけで、平均1000コンボが期待できると推測できるわけです!素晴らしい。
まとめ
というわけで、今回はパズドラ に関していろいろと遊んでみました。
「オトナ」の10コンボ、したいですねぇ。
ちゃんと練習して大人の10コンボもできるようにしたいと思います。。。
シミュレーション的にはかなりきれいな結果が出ましたが、これ、理論的にどうなんでしょう?
結構きれいな結果なので、マクロに見たときに何らかの考察ができるのでは??と期待しています。
誰かよろしくおねがいします!ではではっ