遊戯王 – スモールワールド検索ツール

遊戯王 – スモールワールド検索ツール

概要

遊戯王のカード「スモールワールド」について解説し、デッキ内のサーチ可能なカードをリストアップするツール「スモールワールド検索ツール」を紹介します。

スモールワールド

スモールワールドとは、遊戯王の魔法カードで、手札のモンスターカードを除外することで、デッキ内のモンスターカードをサーチすることができる効果を持つサーチカードです。カードテキストを以下に記載します。

スモールワールド

このカード名のカードは1ターンに1枚しか発動できない。①:手札のモンスター1体を相手に見せる。見せたモンスターの種族・属性・レベル・攻撃力・守備力の内、1つのみが同じモンスター1体をデッキから選んで確認し、手札から見せたモンスターを裏側表示で除外する。さらに確認したカードと種族・属性・レベル・攻撃力・守備力の内、1つのみが同じモンスター1体をデッキから手札に加え、デッキから確認したカードを裏側表示で除外する。

一見、わかりづらいカードですが、「手札のカードAを除外 → デッキのカードBを除外 → デッキのカードCを手札に加える」という流れで手札のモンスターカードからデッキのモンスターカードをサーチできる効果です。ただし、AとB、BとCは「種族・属性・レベル・攻撃力・守備力のうち共通の値は1つのみ」という条件を満たしていなければならないという制限があります。

例えば、ふわんだりぃずデッキのモンスターカードは以下のような感じになると思います。

カード名 種族 属性 レベル 攻撃力 防御力
ふわんだりぃず×ろびーな 鳥獣族 水属性 1 600 1200
ふわんだりぃず×いぐるん 鳥獣族 風属性 1 800 1000
ふわんだりぃず×すとりー 鳥獣族 水属性 1 700 1100
ふわんだりぃず×とっかん 鳥獣族 風属性 1 500 1300
ふわんだりぃず×すのーる 鳥獣族 水属性 10 2900 800
ふわんだりぃず×えんぺん 鳥獣族 風属性 10 2700 1000
灰流うらら アンデット族 炎属性 3 0 1800
ディメンション・アトラクター 魔法使い族 闇属性 6 1200 2200
烈風帝ライザー 鳥獣族 風属性 8 2800 1000
増殖するG 昆虫族 地属性 2 500 200
烈風の結界像 鳥獣族 風属性 4 1000 1000

モンスターカードを点で表し、これらのカードを「種族・属性・レベル・攻撃力・守備力のうち共通の値は1つのみ」という条件の場合のみ、線で結びます。

  • 「増殖するG」と「ふわんだりぃず×とっかん」は攻撃力500という唯一の共通点があり、種族・属性・レベル・守備力は異なるので線で結べます。
  • 「ふわんだりぃず×すのーる」と「ふわんだりぃず×いぐるん」は鳥獣族という唯一の共通点があり、属性・レベル・攻撃力・守備力は異なるので線で結べます。

このようにして線で結んでいくと以下のグラフが完成します。

ふわんだりぃずのグラフ

このとき、あるモンスターカードから2つ離れたモンスターカードをサーチできるというのがこのスモールワールドの効果です。例をいくつかあげます。

  • 「増殖するG」を手札から除外 → 「ふわんだりぃず×とっかん」をデッキから除外 → 「ふわんだりぃず×すのーる」を手札に加える。
  • 「ふわんだりぃず×すのーる」を手札から除外 → 「烈風の結界像」をデッキから除外 → 「ふわんだりぃず×ろびーな」を手札に加える。

スモールワールド検索ツール

試合中にデッキ内のすべてのモンスターのステータスを把握して使うのは難しいので、予めカンペを作っておくことをおすすめします。そのためのツールを以下に用意しました。(PCからの利用推奨)

スモールワールド検索ツール

使い方はまずデッキ内のモンスターカードのみを追加します。検索バーにカード名の一部を入力することで対象のカードがフィルタされます。(例:「鉄獣」と入力すると、鉄獣が含まれるカードだけが表示されます。)

スモールワールド検索ツール

カードを追加していくと、以下のようなグラフ及びサーチできるカード一覧の組み合わせ表が自動で作成されます。

スモールワールド検索ツール

スモールワールド仮説

「スモールワールド」のカードの由来は、おそらく スモール・ワールド仮説 からきています。スモールワールド仮説とは、知り合い関係を芋づる式にたどっていけば比較的簡単に世界中の誰にでも行き着くという仮説です。詳しくは Wikipedia を見ていただいのですが、遊戯王の場合、「種族・属性・レベル・攻撃力・守備力のうち共通の値は1つのみ」という条件でその2つのモンスターは繋がっているとしたとき、あるカードから他のカードは比較的簡単に繋がっているということを表しています。

2022年8月時点のモンスターカードの一覧 (EX デッキに入るエクシーズ、リンク、シンクロ、融合は除く) の一覧を記載した monsters.json を用意したので実際に調べて見ましょう。読み込んで配列を見てみると、各要素にはカード名、種族・属性・レベル・攻撃力・守備力といった情報が含まれています。

In [1]:
import json

with open("monsters.json") as f:
    monsters = json.load(f)
    
print(monsters[0])
{'id': 4007, 'name': '青眼の白龍', 'name_en': 'Blue-Eyes White Dragon', 'ruby': 'ブルーアイズ・ホワイト・ドラゴン', 'race': 'ドラゴン族', 'attr': '光属性', 'level': 8, 'attack': 3000, 'defence': 2500, 'detail': ['通常'], 'text': '高い攻撃力を誇る伝説のドラゴン。どんな相手でも粉砕する、その破壊力は計り知れない。'}

この情報を用いて、モンスターが点、唯一の共通点を辺とした(グラフ理論 の意味での)グラフを作成します。

In [2]:
import networkx as nx


def get_commons(monster1, monster2):
    """共通の項目一覧を取得する。"""
    commons = []  # 共通の要素

    for key in ["race", "attr", "level", "attack", "defence"]:
        if monster1[key] == monster2[key]:
            commons.append(key)

    return commons


# グラフを作成する。
G = nx.Graph()

# モンスターを点として追加する。
G.add_nodes_from([(x["name"], x) for x in monsters])

for monster1 in monsters:
    for monster2 in monsters:
        commons = get_commons(monster1, monster2)
        if len(commons) == 1:
            # 2つのモンスターの共通点が1つのみなら辺を追加する。
            G.add_edge(monster1["name"], monster2["name"], common=commons[0])

各点(モンスター)が他の点(モンスター)と繋がっている辺の数を数えます。

In [3]:
data = []

for node, monster in G.nodes(data=True):
    data.append((monster, G.degree(node)))
# 辺の数 (次数) が少ない順にソートする。
data = sorted(data, key=lambda x: x[1])

繋がっている辺の数が少ない点の一覧を出力することで、サーチするのが難しいモンスターの一覧が出力できます。 その結果、サーチしづらいカード1位は「光の創造神 ホルアクティ」となりました。ステータスが「創造神族 / 神属性 / レベル12 / 攻撃力? / 防御力?」なので、他のモンスターとの共通点がなさすぎて、共通点1つだけという条件が難しいので納得ですね。 その他、魚族、レベル7、攻撃力2550、防御力2350のように珍しい値のものが多く、同様の理由で上位にランクインしました。

In [4]:
def format_monster(x):
    return (
        f"{x['name']} {x['race']} / {x['attr']} / レベル{x['level']} / 攻撃力{x['attack']} / 防御力{x['defence']}"
    )

top_k = 50
for i, (monster, degree) in enumerate(data[:top_k], 1):
    print(f"{i:2d} 辺の数:{degree:4d} {format_monster(monster)}")
 1 辺の数:  34 光の創造神 ホルアクティ 創造神族 / 神属性 / レベル12 / 攻撃力? / 防御力?
 2 辺の数: 112 オベリスクの巨神兵 幻神獣族 / 神属性 / レベル10 / 攻撃力4000 / 防御力4000
 3 辺の数: 112 ラーの翼神竜-不死鳥 幻神獣族 / 神属性 / レベル10 / 攻撃力4000 / 防御力4000
 4 辺の数: 127 オシリスの天空竜 幻神獣族 / 神属性 / レベル10 / 攻撃力? / 防御力?
 5 辺の数: 127 ラーの翼神竜 幻神獣族 / 神属性 / レベル10 / 攻撃力? / 防御力?
 6 辺の数: 127 ラーの翼神竜-球体形 幻神獣族 / 神属性 / レベル10 / 攻撃力? / 防御力?
 7 辺の数: 652 真竜皇アグニマズドV 幻竜族 / 炎属性 / レベル9 / 攻撃力2900 / 防御力1900
 8 辺の数: 711 ヘルフレイムエンペラー 炎族 / 炎属性 / レベル9 / 攻撃力2700 / 防御力1600
 9 辺の数: 712 ジュラック・タイタン 恐竜族 / 炎属性 / レベル9 / 攻撃力3000 / 防御力2800
10 辺の数: 736 氷水艇キングフィッシャー 水族 / 水属性 / レベル9 / 攻撃力2500 / 防御力2500
11 辺の数: 738 火之迦具土 炎族 / 炎属性 / レベル8 / 攻撃力2800 / 防御力2900
12 辺の数: 738 メタルフォーゼ・バニッシャー サイキック族 / 炎属性 / レベル9 / 攻撃力2900 / 防御力1900
13 辺の数: 746 炎の王 ナグルファー 獣戦士族 / 炎属性 / レベル9 / 攻撃力3100 / 防御力200
14 辺の数: 798 ビッグバンドラゴン 炎族 / 炎属性 / レベル6 / 攻撃力2200 / 防御力1700
15 辺の数: 799 真竜凰マリアムネ 幻竜族 / 風属性 / レベル9 / 攻撃力2700 / 防御力2100
16 辺の数: 800 水魔神-スーガ 水族 / 水属性 / レベル7 / 攻撃力2500 / 防御力2400
17 辺の数: 815 大要塞クジラ 魚族 / 水属性 / レベル7 / 攻撃力2550 / 防御力2350
18 辺の数: 820 要塞クジラ 魚族 / 水属性 / レベル7 / 攻撃力2350 / 防御力2150
19 辺の数: 820 城塞クジラ 魚族 / 水属性 / レベル7 / 攻撃力2350 / 防御力2150
20 辺の数: 828 The blazing MARS 炎族 / 炎属性 / レベル8 / 攻撃力2600 / 防御力2200
21 辺の数: 831 イビリチュア・ソウルオーガ 水族 / 水属性 / レベル8 / 攻撃力2800 / 防御力2800
22 辺の数: 838 氷の王 ニードヘッグ 幻竜族 / 水属性 / レベル9 / 攻撃力2100 / 防御力2600
23 辺の数: 842 ウォーター・ドラゴン-クラスター 海竜族 / 水属性 / レベル10 / 攻撃力2800 / 防御力2600
24 辺の数: 853 ジュラック・スピノス 恐竜族 / 炎属性 / レベル7 / 攻撃力2600 / 防御力1700
25 辺の数: 858 フレムベル・デスガンナー 炎族 / 炎属性 / レベル6 / 攻撃力2200 / 防御力200
26 辺の数: 880 クラブ・タートル 水族 / 水属性 / レベル8 / 攻撃力2550 / 防御力2500
27 辺の数: 881 3万年の白亀 水族 / 水属性 / レベル5 / 攻撃力1250 / 防御力2100
28 辺の数: 892 リブロマンサー・ファイアバースト サイバース族 / 炎属性 / レベル7 / 攻撃力2800 / 防御力2800
29 辺の数: 894 超古深海王シーラカンス 魚族 / 水属性 / レベル7 / 攻撃力2800 / 防御力2200
30 辺の数: 895 炎霊神パイロレクス 恐竜族 / 炎属性 / レベル8 / 攻撃力2800 / 防御力2200
31 辺の数: 895 デグレネード・バスター サイバース族 / 炎属性 / レベル7 / 攻撃力2500 / 防御力2500
32 辺の数: 897 陽炎獣 ヒッポグリフォ 炎族 / 炎属性 / レベル6 / 攻撃力2100 / 防御力200
33 辺の数: 899 岩石カメッター 水族 / 水属性 / レベル6 / 攻撃力1450 / 防御力2200
34 辺の数: 903 氷水帝コスモクロア 水族 / 水属性 / レベル10 / 攻撃力1500 / 防御力3000
35 辺の数: 910 ラヴァル炎火山の侍女 炎族 / 炎属性 / レベル1 / 攻撃力100 / 防御力200
36 辺の数: 929 戦華の孟-曹徳 獣戦士族 / 炎属性 / レベル8 / 攻撃力3000 / 防御力2500
37 辺の数: 931 ミスターボルケーノ 炎族 / 炎属性 / レベル5 / 攻撃力2100 / 防御力1300
38 辺の数: 933 フレムベル・パウン 炎族 / 炎属性 / レベル1 / 攻撃力200 / 防御力200
39 辺の数: 937 神魚 魚族 / 水属性 / レベル5 / 攻撃力1650 / 防御力1700
40 辺の数: 937 霊魂鳥神-彦孔雀 鳥獣族 / 風属性 / レベル8 / 攻撃力3000 / 防御力2500
41 辺の数: 939 レインボー・マリン・マーメイド 魚族 / 水属性 / レベル5 / 攻撃力1550 / 防御力1700
42 辺の数: 942 風霊神ウィンドローズ 鳥獣族 / 風属性 / レベル8 / 攻撃力2800 / 防御力2200
43 辺の数: 954 ウォーター・ドラゴン 海竜族 / 水属性 / レベル8 / 攻撃力2800 / 防御力2600
44 辺の数: 957 フレイムダンサー 炎族 / 炎属性 / レベル2 / 攻撃力550 / 防御力450
45 辺の数: 958 セリオンズ“リーパー”ファム 水族 / 水属性 / レベル7 / 攻撃力1400 / 防御力2500
46 辺の数: 960 海亀壊獣ガメシエル 水族 / 水属性 / レベル8 / 攻撃力2200 / 防御力3000
47 辺の数: 963 フレイム・ケルベロス 炎族 / 炎属性 / レベル6 / 攻撃力2100 / 防御力1800
48 辺の数: 965 ヴォルカニック・デビル 炎族 / 炎属性 / レベル8 / 攻撃力3000 / 防御力1800
49 辺の数: 971 水精鱗-サルフアビス 水族 / 水属性 / レベル7 / 攻撃力2500 / 防御力2000
50 辺の数: 972 炎神機-紫龍 炎族 / 炎属性 / レベル8 / 攻撃力2900 / 防御力1800

逆に他のモンスターとのつながりが多く、サーチしやすいカード上位50もピックアップしました。

In [5]:
for i, (monster, degree) in enumerate(reversed(data[-top_k:]), 1):
    print(f"{i:2d} 辺の数:{degree:4d} {format_monster(monster)}")
 1 辺の数:2927 極星獣ガルム 獣族 / 闇属性 / レベル4 / 攻撃力800 / 防御力1900
 2 辺の数:2910 クロノダイバー・レギュレーター 機械族 / 闇属性 / レベル4 / 攻撃力600 / 防御力200
 3 辺の数:2906 ヴァレット・リチャージャー ドラゴン族 / 闇属性 / レベル4 / 攻撃力0 / 防御力2100
 4 辺の数:2906 霊廟の守護者 ドラゴン族 / 闇属性 / レベル4 / 攻撃力0 / 防御力2100
 5 辺の数:2905 黒曜岩竜 岩石族 / 闇属性 / レベル4 / 攻撃力800 / 防御力2100
 6 辺の数:2898 ゴーストリック・セイレーン 天使族 / 闇属性 / レベル4 / 攻撃力800 / 防御力1500
 7 辺の数:2897 ダーク・オネスト 天使族 / 闇属性 / レベル4 / 攻撃力1100 / 防御力1900
 8 辺の数:2897 トークンコレクター 悪魔族 / 地属性 / レベル4 / 攻撃力0 / 防御力2000
 9 辺の数:2897 ギミック・パペット-ハンプティ・ダンプティ 機械族 / 闇属性 / レベル4 / 攻撃力0 / 防御力100
10 辺の数:2890 二角獣レーム 獣族 / 闇属性 / レベル4 / 攻撃力800 / 防御力1600
11 辺の数:2886 ヴェルズ・カイトス 水族 / 闇属性 / レベル4 / 攻撃力1750 / 防御力1050
12 辺の数:2880 サイバー・ダーク・キメラ 機械族 / 闇属性 / レベル4 / 攻撃力800 / 防御力2100
13 辺の数:2873 極星天ヴァナディース 天使族 / 闇属性 / レベル4 / 攻撃力1200 / 防御力400
14 辺の数:2871 ドラゴンメイド・チェイム ドラゴン族 / 闇属性 / レベル4 / 攻撃力500 / 防御力1800
15 辺の数:2870 失楽の魔女 天使族 / 闇属性 / レベル4 / 攻撃力100 / 防御力2000
16 辺の数:2869 ヴェルズ・マンドラゴ 植物族 / 闇属性 / レベル4 / 攻撃力1550 / 防御力1450
17 辺の数:2867 トランソニックバード 鳥獣族 / 闇属性 / レベル4 / 攻撃力0 / 防御力2400
18 辺の数:2863 地縛霊 悪魔族 / 地属性 / レベル4 / 攻撃力500 / 防御力2000
19 辺の数:2859 アモルファージ・キャヴム ドラゴン族 / 地属性 / レベル4 / 攻撃力0 / 防御力2050
20 辺の数:2859 RR-ブースター・ストリクス 鳥獣族 / 闇属性 / レベル4 / 攻撃力100 / 防御力1700
21 辺の数:2858 シルバーヴァレット・ドラゴン ドラゴン族 / 闇属性 / レベル4 / 攻撃力1900 / 防御力100
22 辺の数:2858 DMZドラゴン ドラゴン族 / 闇属性 / レベル4 / 攻撃力0 / 防御力2000
23 辺の数:2857 アモルファージ・プレスト ドラゴン族 / 地属性 / レベル4 / 攻撃力0 / 防御力1950
24 辺の数:2857 トラップ・リアクター・RR 機械族 / 闇属性 / レベル4 / 攻撃力800 / 防御力1800
25 辺の数:2854 アモルファージ・ヒュペル ドラゴン族 / 地属性 / レベル4 / 攻撃力1750 / 防御力0
26 辺の数:2853 享楽の堕天使 天使族 / 闇属性 / レベル4 / 攻撃力0 / 防御力1600
27 辺の数:2853 アモルファージ・オルガ ドラゴン族 / 地属性 / レベル4 / 攻撃力1650 / 防御力0
28 辺の数:2849 ダーク・ラビット 獣族 / 闇属性 / レベル4 / 攻撃力1100 / 防御力1500
29 辺の数:2847 ヴェルズ・オ・ウィスプ 炎族 / 闇属性 / レベル4 / 攻撃力450 / 防御力2050
30 辺の数:2846 Kozmo-ダーク・ローズ サイキック族 / 闇属性 / レベル4 / 攻撃力1900 / 防御力300
31 辺の数:2844 魔鍵銃-バトスバスター 機械族 / 闇属性 / レベル4 / 攻撃力2000 / 防御力2200
32 辺の数:2844 ヴェルズ・ヘリオロープ 岩石族 / 闇属性 / レベル4 / 攻撃力1950 / 防御力650
33 辺の数:2843 ヴェルズ・オランタ 炎族 / 闇属性 / レベル4 / 攻撃力1650 / 防御力1250
34 辺の数:2843 堕天使ナース-レフィキュル 天使族 / 闇属性 / レベル4 / 攻撃力1400 / 防御力600
35 辺の数:2842 ヴェルズ・ザッハーク ドラゴン族 / 闇属性 / レベル4 / 攻撃力1850 / 防御力850
36 辺の数:2841 ストームサイファー サイバース族 / 闇属性 / レベル4 / 攻撃力2400 / 防御力0
37 辺の数:2839 オルシャドール-セフィラルーツ 岩石族 / 闇属性 / レベル4 / 攻撃力450 / 防御力1950
38 辺の数:2837 溟界の滓-ナイア 爬虫類族 / 闇属性 / レベル4 / 攻撃力0 / 防御力2000
39 辺の数:2837 人造人間-サイコ・ジャッカー 機械族 / 闇属性 / レベル4 / 攻撃力800 / 防御力2000
40 辺の数:2834 ファイアウォール・ガーディアン サイバース族 / 闇属性 / レベル4 / 攻撃力100 / 防御力2000
41 辺の数:2834 ヴェルズ・サラマンドラ 恐竜族 / 闇属性 / レベル4 / 攻撃力1850 / 防御力950
42 辺の数:2833 クロノダイバー・テンプホエーラー 機械族 / 闇属性 / レベル4 / 攻撃力800 / 防御力1400
43 辺の数:2832 地獄の番熊 獣族 / 闇属性 / レベル4 / 攻撃力1300 / 防御力1800
44 辺の数:2831 ヴェルズ・アザトホース 爬虫類族 / 闇属性 / レベル4 / 攻撃力750 / 防御力1950
45 辺の数:2829 D-HERO ディフェンドガイ 戦士族 / 闇属性 / レベル4 / 攻撃力100 / 防御力2700
46 辺の数:2828 RR-シンギング・レイニアス 鳥獣族 / 闇属性 / レベル4 / 攻撃力100 / 防御力100
47 辺の数:2828 ヴェルズ・サンダーバード 雷族 / 闇属性 / レベル4 / 攻撃力1650 / 防御力1050
48 辺の数:2828 ブロッカー 機械族 / 闇属性 / レベル4 / 攻撃力850 / 防御力1800
49 辺の数:2826 ドラゴラド ドラゴン族 / 闇属性 / レベル4 / 攻撃力1300 / 防御力1900
50 辺の数:2825 ZW-玄武絶対聖盾 水族 / 地属性 / レベル4 / 攻撃力0 / 防御力2000