概要
このページでは飛空城の自動攻略のために必要な知識を洗い出してまとめます。
攻略自動化の前提条件
以下の前提条件の上で飛空城攻略自動化の達成を目標とします。
- JavaScript のみで動作する
- 実用的な処理時間で攻略手順を導き出せる
- 攻撃編成に制約を持たせることを許容する
実現方法
自動攻略を行う方法はいくつかの方法が考えられます。
- 全行動パターンをシミュレートして勝利パターンを見つける
- 機械学習により盤面における最適な行動パターンを予測できるようにする
- プレイヤーの経験則に基づいてAIを実装し、そのAIで戦闘をシミュレートして勝利する行動パターンを見つける
方法1はどんなパターンにおいても攻略可能なマップにおいては攻略手順を導き出すことが可能ですが、処理速度が現実的ではないので、今回の目的において選択することはできません。
方法2はうまくいけば短時間で精度の高い勝利パターンを導き出せるものの、FEHは味方、敵、マップのバリエーションが多く、それらの中から適切に必要最低限の特徴量を抽出するのが困難です。
方法3はプレイヤーの知識や攻撃編成に強く依存するため、プレイヤーの攻撃編成以外の編成での攻略はできませんし、プレイヤーの手動操作以上の精度を出すことができません。ただし、プレイヤーが手動攻略できる防衛マップにおいては攻略手順を短時間で導き出すことが可能です。また、この知識を方法2に応用することも可能です。
プレイヤーである私自身の経験則に基づけば、現環境においてはほとんどの防衛は手動攻略可能であるため、方法3の経験則に基づくAIの実装が今回の目的に最適です。よって方法3による実現を目指します。
対象とする攻撃編成の条件
私自身の経験則に基づいた攻略を行うため、私自身が採用している攻撃編成の条件を洗い出します。
- アタッカー1体以上
- 推奨
- 攻撃50以上の連撃武器持ち
- 敵の速さに依存しないワンパン力
- 射程2の騎馬
- 攻撃範囲が広く、選択肢が広がる
- 罠解除役として最適
- 退きやすい
- 攻撃後の再行動を受けやすい
- HP61以上
- 重圧罠解除役を担うため
- 待ち伏せ持ち
- 射程2の敵の攻撃を複数体同時に受けきれる
- 例: ラインハルト、伝承リーフ
- 受け役0体以上(敵の攻撃を受ける必要がない、もしくはアタッカーで受けきれる場合は不要)
- 再行動役1体以上
- ぶちかまし役1体
- 罠解除に必要
攻略手順の言語化
私自身が上記の攻撃編成を用いて手動で飛空城を攻略する際に行う手順を言語化します。
- 初撃までに破壊可能な防衛施設や罠について、破壊することで敵の攻撃範囲が変化しないものは、一旦ないものと考える
- この状態でアタッカーで敵を1体以上倒しつつ、生存できる行動を探す
- 初撃で倒すべき敵の優先順位(場合によって優先順位は変動する、あくまで主な目安)
- 高火力な敵
- 残ると次ターンに受けきれないリスクが高くなる
- 再行動持ち
- 残ると敵の行動パターンが増えるので計算量が増える
- 攻撃範囲の広い敵
- 攻撃範囲の広い敵が残るとこちらの行動範囲が狭くなり、行動の選択肢が減る
- その他の敵
- 攻撃後に生存できる行動は主に以下のいずれか
- その場にとどまる
- 受けキャラでアタッカーを引き戻す
- 再行動(ノヴァの聖戦士や再行動役によるもの)
- 再行動後の行動
- 移動する
- 更に敵を倒す
- 味方を引き戻す
- 生存するためのテクニックはいくつか存在する
- 待ち伏せや受け役で敵のアタッカーを倒しきる
- 敵の攻撃範囲の届かない範囲に退く
- アタッカーの行動パターンを広げる再行動役の動きを封じる
- 初撃で倒してしまう
- 敵の再行動ユニットから5ダメージ以上を受ける
- 再行動ユニットだけの攻撃範囲があればそこで受ける
- 再行動ユニットだけの攻撃範囲がない場合でも、敵の再行動ユニットが救援の行路持ちであれば、ダメージを負った他の敵の移動範囲を読むことで、敵ターン中に再行動ユニットだけの攻撃範囲が生まれるので、そこで受ける
- 敵の補助持ちに再行動を消費させる
- 味方の攻撃範囲に敵を含めて敵の補助行動を誘発させる
- 敵の攻撃を分散させる
- 例えばパニック持ちの攻撃をメインの受け役でないユニットに分散する(条件を満たせば受け役より別のユニットを狙う)
- 2の行動を行うために取り除かないといけない防衛施設、罠を洗い出す
- 以下の施設はついでに破壊できれば破壊する
- 回復の塔
- エナジー施設
- 3の防衛施設、罠を取り除くための手順を探す
- 多くの場合、3ターン目までに初撃を行う
- 初撃で生存した以降は、生存可能であることを前提に以下の行動を優先して行動を決める
- 敵を倒す
- 優先順位は手順2と同じ
- エナジー施設をすべて破壊していない、かつ敵が1体しか生存していない場合はこの行動は無効
- エナジー施設を破壊する
- その他の施設を破壊する
ターン毎の主な行動パターン
多くの場合、ターン数に応じて以下の行動を行うものとして、現在のターンにおける優先度の高い行動の指標とします。
ターン | 主な行動 |
---|---|
1 | 施設破壊や罠解除 |
2 | 施設破壊や罠解除、初撃を行うための配置 |
3 | 初撃 |
4~7 | エナジー回収、残った敵の殲滅 |
価値のある行動の定義
以下の行動をすることが価値のある行動であると定義します。
- 敵を倒して生存できる
- 補助を行った味方が価値のある行動を行うことができる
- 再行動を行った味方が敵を倒したり、エナジー施設を破壊して生存する
- ぶちかました再行動役がアタッカーを再行動して、アタッカーが敵を倒して生存できる
- エナジー施設を破壊して生存できる
- オブジェクトを破壊して生存できる
- 敵が移動開始するまでは敵の行動範囲に影響しない施設のみ破壊することに価値があるとする
- 敵が移動開始した後はすべてのオブジェクトについて破壊することに価値があるとする
- 生存可能なマスに移動する
ゲームのAIに不足している、修正が必要な行動
ゲームのAIでは、主に「戦闘前補助」「戦闘」「戦闘後補助」「移動」「オブジェクト破壊」行動が存在しますが、自動攻略AIを実装するために追加が必要、もしくは修正が必要な行動を洗い出します。
- 補助前補助
- 味方が補助を行えるようにするためにその味方に補助を行う行動
- 例えば、再行動役がアタッカーに再行動を行えるようにするために再行動役をぶちかます
- 罠解除
- 複数のユニットが連携して以下の行動を行います
- 罠の2マス手前に罠解除役が移動(もともといるなら移動の必要なし)
- 罠解除役を再行動(既に行動可能なら再行動の必要なし)
- ぶちかまし役が罠解除役をぶちかまして罠解除
- 罠解除後、危険範囲の外に移動、もしくは初撃を行う
- 重圧の罠はHP61以上なら行動が確定するため、積極的に解除して問題ない
- 落雷の罠はダメージの大きさにより、その後の行動パターンが複数に分岐してしまうので、できるだけ解除は避ける
- 退避
- 危険範囲の外、もしくは次ターンに受けきれる位置に退避
- 攻撃範囲内に敵がいる場合においてもそのまま攻撃しても次ターンに生存できない場合、退避することで生存できる可能性がある
- 生存できるかどうかに基づいた移動補助
- 単に危険度が下がるかどうかではなく、次のターン生存できるようになるかどうかを基準に移動補助を行う
- 受け可能な位置に移動
- 次ターンで敵の攻撃を受けきれる位置に移動
- 危険範囲外に移動
- 次ターンで敵から攻撃を受けない位置に移動
- エナジー施設の優先的な破壊
- 特に敵が残り1体になった場合は、敵を倒すことよりも優先
- エナジー施設の追跡
- エナジー施設を破壊するために追跡対象の計算に含める
- 敵の行動範囲に影響しないオブジェクトの積極的破壊
- 移動のついでに破壊できれば積極的に破壊