こんにちは、ほけきよです。
皆さんはパズドラやったことありますか?僕は割と古参のユーザーです。ランクは720くらいです。
先日、こんな動画を観ました。
これを観てて、そういえば、こういうの作って、コンボの実験をしてみたかったんだよなぁ。と思い出しました。なので、コンボシミュレータを自作することにしました。
パズドラコンボの原理
実は、さっきの動画はコンボに関しては2点の意味で正しくありません
- ドロップ*1の消え方が少しまちがっている
落とし
/落ちコン
が無い
しかし、コンボシミュレータではこれをきちんと実装する必要があります。なので、UI部分は作らず、ここのロジック部分に注力して作ってみました。
パズドラの基本
パズドラは基本、6×5個で6種類のドロップで構成されます。 これらのドロップを3つ以上連結させることでドロップが消え、相手に攻撃ができます。
消え方
ドロップは、3つ以上連結していると消えます。この3つ以上というのが、パズドラでは縦横一方向において、3つ以上の連結なのです。詳しくは下図をご覧ください。
パズドラのコンボ数は、この消えたまとまりの数です。連結すると1コンボに集約されちゃうので、分けたほうがお得です*2
落としと落ちコン
ドロップを消したときに、上部にドロップが残っていると、そのドロップが落ちてきます。
そこで3つ以上のドロップが連結したら、またドロップが消えます。これを 落とし
といいます。
一回盤面内のコンボが終わると、ドロップがランダムに補充されます。ランダムに補充されたあと、3つ以上のドロップが連結したら、またドロップが消えます。これを落ちコン
といいます。
落としと落ちコンの違いは、
- 落としは 「狙ってできる」 ところ
- 落ちコンは 「完全運任せ」 なところ
です。
これらを実装していきます。
実装
まず、実際にみてもらいましょう。(※今回はUIやグラフィックは皆無なので、出力を画像で可視化してパラパラ漫画のように流しているだけです。)
ドロップを消す/落とし/落ちコンを(多分)きちんと実装できました。
シミュレータの良いところは、盤面やドロップの種類を自由に設定できるところですね。 あとでじっくりと遊びます。
実装コード自体はgithubに上げたので、詳しくはそこでみてください。
- ドロップの種類
- 縦横に配置するドロップの数
をパラメータにコンボ数のシミュレーションができるので、楽しいと思います。
やってて結構悩んだのが、「消すルール」のところでした。連結が意外に難しい。おそらくもっと簡単な方法があるはずです。*3
「大人の10コンボ」をしたい。
パズドラだと誰でも憧れるヤツ。
大人の10コンボってなに?
ところで、パズドラをしている方なら「マックスむらい」さんという方を一度は聞いたことあるのではないでしょうか。 パズドラ公式生放送に出て、我々ユーザのために石をもぎ取ってくれる存在です。パズドラの全盛期は彼とともに作られたといっても過言ではないでしょう。
ここで最後に言われている「みたか、これが大人の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コンボもできるようにしたいと思います。。。
シミュレーション的にはかなりきれいな結果が出ましたが、これ、理論的にどうなんでしょう? 結構きれいな結果なので、マクロに見たときに何らかの考察ができるのでは??と期待しています。
誰かよろしくおねがいします!ではではっ