見出し画像

【デュエマ】革命2を考慮したシールド・トリガー確率計算ツールを作った話【デュエプレ】

はじめに

「逆転こそが、カードゲームだ。」

これは、デュエル・マスターズというトレーディングカードゲームのキャッチフレーズです。

この度、デュエル・マスターズの革命2という能力を考慮した、
シールド・トリガーの確率計算ツールを作成しました。

今回作成したアプリはChrome上で使えるWeb アプリとなっています。

アプリは以下になります。

使い方の解説や、仕様についてざっくりと説明するため、
noteを記載します。

私はモバイル、WEB等のアプリを開発するプログラマーで情報系分野にて理系大学院を卒業しており、確率の基礎知識や、プログラム作成の基礎知識はまあまあある人間です。デュエル・マスターズのスマホゲーム、デュエル・マスターズ プレイスにドハマりしており、多いときには週70時間ほどプレイしています。

自己紹介

作成の背景

デュエル・マスターズ

デュエル・マスターズというカードゲームは、
40枚一組のデッキで戦い、
対戦相手を守る5枚のシールドを破壊し、対戦相手にアタックを通すことで勝利するカードゲームです。

※40枚以上利用するルールもありますが、割愛します。

↑公式のルール説明動画

シールド・トリガーと確率

このゲームの最大の特徴はシールド・トリガーという逆転要素。
シールドが破壊された時にそのシールドが
シールド・トリガーという能力を持っていたら、
コストを支払わずに即時で発動が可能となります。

このシールド・トリガーにより、
負けると思っていた盤面を返すことができたり、
逆に勝ち確だと思っていた盤面が覆されたりと、
戦況を左右する要素となっています。

このシールドは試合開始時に
シャッフルされたデッキの上から5枚置かれるため、
初期状態で自分でシールドトリガーを埋め込むことはできません。

※カードの能力でトリガーカードをシールドに送ることは可能ですが、今回は割愛します。
※シールドは複数枚一気に割ることが可能です。

そのため、シールド・トリガーの有無は
デッキ内のトリガーカードの数に依存する、ランダム要素となっています。

逆に言えば、デッキ内のトリガーカードの数が決まれば、
そのシールドにシールド・トリガーが何枚あるかは確率として計算できます。

この確率を先駆者の方が計算し、表にしたものが以下です。

自分もよく使用している、かなり便利なものとなっています。

普通のシールド・トリガーならこの表にて確認すれば十分なのですが、
条件付きでシールド・トリガーとなるカードが存在し、
そのカードもふまえた確率、となると、
この表では確認ができなくなります。

その条件が、革命2という能力です。

革命2

革命2という能力は、
自分のシールドが残り2枚以下になったら発動する能力です。

デュエル・マスターズには、
『革命2の能力下でシールドトリガーとなるカード』、
というのがいくつか存在します。

多分一番有名なやつ(画像は公式HPより引用)

革命2でシールド・トリガーになるカードは、
残り2枚のシールドが破壊された時にこのカードが出てきた場合、
シールド・トリガーとしてコストを支払わずに使用できるのは
もちろんのこと、
シールド破壊後に残りシールド枚数が2枚以下になった場合でも
コストを支払わずに発動できます。

例えば、シールド枚数3枚のときに1枚破壊したシールドが
革命2でシールド・トリガーになるカードだった場合、
シールドの残り枚数が2枚以下なので革命2の能力が発動し
シールド・トリガーとなってそのまま発動できる、といった形です。

つまり、
シールドの割り方によってトリガーとして発動したり、
しなかったりするというわけです。

この普段はシールド・トリガーではないが、
特定の条件下でシールド・トリガーになるカードの存在により、
トリガーの発動確率は複雑化し計算が難しくなりました。

この問題を解決するため、
革命2でシールド・トリガーになるカードを考慮に入れた
シールド・トリガーの発生確率を計算するツールを作成しました。

アプリの使い方

アプリはこちら。


使い方は簡単。
デッキの中のシールド・トリガーのカードの枚数と、
革命2でシールド・トリガーとなるカードの枚数をプルダウンで入力し、
計算ボタンを押すだけです。

計算後、下の確率表にそれぞれの場合の確率が表示されます。

「5/5」 ,「2/5」というのは、シールド・トリガーの発生枚数です。
「5/5」なら、5枚、「2/5」なら2枚シールド・トリガーの発生する事象を表しています。

左の「1枚、1枚、1枚、1枚、1枚」、「3枚、2枚」というのはシールドの割り方です。
革命2でシールド・トリガーとなるカードは、
シールドの割り方によってシールド・トリガーとして発動できる場合と、
できない場合が分かれます。
そのため、シールド・トリガーの発生確率が、
シールドの割り方に依存するわけです。

シールドの割り方は人間の意志によって変化するもののため、
割り方ごとに確率を計算する必要があります。
「1枚、1枚、1枚、1枚、1枚」なら、5枚のシールドを1枚ずつ割った場合、
「3枚、2枚」なら、3枚一気に割った後に2枚一気に割る、
という事象を表しています。

以上が、使い方と表現の説明になります。

※革命2のトリガー枚数を0にすると、トリガー確率は前述の確率表と一致します。

仕様

仕様というか、作成に使用したツール等々を列挙します。

  • 作成フレームワーク:Flutter

  • 作成言語:Dart

  • IDE : Visual Studio Code

  • ホスティングサービス: Firebase Hosting

  • 作成時間 : 4 ~ 5時間くらい

作成の裏話 

UI (ユーザーインターフェース、画面構成)

今回のアプリは、
以前作成したデュエル・マスターズ プレイス用 初動枚数検討ツールの
UIをベースに、作成を行いました。

↑初動枚数検討ツール

メイ様のナーフにより、余り利用用途のないものとなっていますが、
まだ、使えなくはないツールです。

このため、UI作成にはほぼ時間をかけていないです。

確率計算ロジック 失敗例1

苦労したのは確率の計算ロジックでした。この失敗例を2つと、現在の仕様を紹介します。

最初に考えたのは、計算式を組み立て、それをアプリとして作成すること。
ただ、できなくはないと思うのですが、計算が難しく、
間違えた情報を表示する可能性が非常に高くなると考え、却下しました。

確率計算ロジック 失敗例2

次に考えたのは、全部数え上げる方法です。
40枚のデッキでのシールド5枚の組み合わせは
40枚の中から5枚選ぶ順列で40P5通りなので、
78960960通りとなります。

これらを一度データとして保持し、
このそれぞれに割り方ごとのトリガー発生枚数をカウントして、
最後に確率として出す方法を考えました。

コンピュータの計算能力の高さ、という利点を活かした方法です。
計算方法による間違えもなく、正確な値が出ると踏んでいました。

ですが、実際にやってみたところ、処理にかなり時間がかかり、
実用的ではありませんでした。

確率計算ロジック 成功例

では、現在の仕様はどうしたのかです。

今回の問題では、デッキ内のカードは、
シールド・トリガーのカード(以下トリガー)、
革命2でシールド・トリガーとなるカード (以下革命2トリガー)、
シールド・トリガーで無いカード(以下非トリガー)
の3種類に分かれます。

なので、これらの種類でのシールド5枚の場合分けは、
3種類の5乗で、高々243通りです。

※シールド・トリガーが4枚以下の場合等を考慮すると、
この場合の数はもっと少なくなります。
アプリでは考慮に入れています。

シールド・トリガーが何枚発生するか、というのは、
このシールドの場合分けと、シールドの割り方に依存しています。

例えば、
非トリガー、非トリガー、非トリガー、トリガー、革命2トリガー
のシールドの並び順で、3枚、2枚と割った場合、
トリガーは2枚発生します。

この、
非トリガー、非トリガー、非トリガー、トリガー、革命2トリガー
の組み合わせがデッキの状況で何通りあるか、がわかれば、
トリガー2枚のカウントとして、この場合の数を加えることで、
数え上げができます。

この場合の数ですが

トリガーが◯枚、革命2トリガーが△枚、非トリガーが□枚ですべて区別のつく場合のとき、5枚めくって並べたカードが
非トリガー、非トリガー、非トリガー、トリガー、革命2トリガー
となる場合の数を求めよ

という問題であり、もっとわかりやすくすると

赤いボールが◯個、青いボールが△個、白いボールが□個ですべて番号付きの場合のとき、5個取って並べたボールが白、白、白、赤、青となる場合の数を求めよ

という、数学の問題になり、計算が簡単に可能です。

まとめると、シールドの場合分けと、シールドの割り方から、
トリガー発生枚数を求め、
このシールドの場合分けが何通りあるのかを記録していくことで、
40P5列挙しなくても同じだけ数え上げることを可能にしています。

ここのロジックを思いつくのにかなり苦労しましたが、
結果、即座に計算完了するアプリとなったので良かったと思います。

まとめ

以上が、デュエル・マスターズの革命2という能力を考慮した、
シールド・トリガーの確率計算ツールの紹介と解説の内容となります。

このアプリの作成は以下のポストがきっかけでした。

きっかけを作ってくださり、大変感謝しております。

こいつ、おもろいな、と思ったら、
以下のXのアカウントのフォローをお願いします。

https://x.com/MAXGameAndMusic

また記事にスキしてもらえると喜びます。

この記事や作成したアプリが誰かの役にたてば幸いです。

この記事が気に入ったらサポートをしてみませんか?