空戦の計算式

攻略・考察/戦法集/空戦の計算式
Last-modified: 2012-03-15 00:59:06

攻略・考察/戦法集

目次 †

空戦とは †

Civ4における空戦(AirCombat)とは航空機の空爆や空挺部隊の降下に対する迎撃戦闘のことです。
航空機に対して戦闘機が迎撃に出た場合は当然として、SAM歩兵などの地上兵器が迎撃に出た場合もこのページのルールに則って戦闘が行われます。

なお、空爆や空挺降下はSDKにおけるCvUnit::airBomb()、CvUnit::airStrike()、CvUnit::paradrop()によって処理されています。

空戦のルール †

なお、ここからは空爆や空挺降下を仕掛ける側を空爆ユニットと記述し、それに対して迎撃を試みる側を迎撃ユニットと記述します。

迎撃出撃の判定 †

まず、空爆ユニットに対して、迎撃ユニットが割り込んで迎撃できるかどうかを判定します。(CvUnit::interceptTest())
この判定は次の手順を上から順に処理していきます。

ただし、修正迎撃率とは次のように決めます。


つまり、ポイントとしては以下のようなことが挙げられます。

迎撃戦闘の計算式 †

迎撃戦闘は通常の戦闘とは違う戦闘方法で行われます。(CvUnit::resolveAirCombat())

まず双方のユニットについて戦闘に使う修正戦闘力を以下のように決めます。

そして、空爆ユニットのラウンド勝率を 空爆ユニットの修正戦闘力/(双方の修正戦闘力の和) と求めます。
迎撃ユニットのラウンド勝率は 1-空爆ユニットのラウンド勝率 となります。

そしてラウンドごとに与えることのできるダメージは、双方ともに 修正迎撃率*50*3/100 となります。
ただし空爆ユニットが航空機であった場合のみ、空爆ユニットは最低でもダメージ 10*4 は与えることができます。
また迎撃ユニットが航空機以外の場合は、空爆ユニットはダメージを与えることはできません。


ここまでで事前準備ができたのでダメージを与えあう処理を行います。

実際の戦闘は基本的には通常の戦闘と同様に、ラウンドごとに勝者を決め敗者にダメージを与えることを繰り返すものとなります。
ただし、以下のような相違点があります。

最後に生き残ったユニットにXPが与えられます。XPの計算は通常の戦闘と全く同じです。


まとめると、ポイントとしては以下のようなことが挙げられます。

空爆のルール †

迎撃されずに地上のユニットに対しての空爆に成功した場合について(CvUnit::airStrike())。

ダメージを与える対象は、通常戦闘で防衛に出るユニットと同様に基本的に戦闘力の最も高いユニットになります。

空爆のダメージは次のような式で求められます。(CvUnit::airCombatDamage())
通常戦闘のラウンドダメージの式と似ていますが、赤色表示されている部分が異なる部分になります。

A = 空爆ユニットの航空戦闘力*現在HP/最大HP
D = 防御ユニットの戦闘力
空爆のダメージ = 30*6 * (3 * A + D) / (3 * D + A)
さらにタイルが都市でバンカーなどで航空ユニットに対する抵抗力を持つ場合、その分だけダメージが減ります。

そして副次ダメージ持ちならば、副次ダメージを与えます。
副次ダメージの計算は航空機以外のユニットによる副次ダメージとほぼ同じですが、次のような相違点があります。


まとめると、ポイントとしては次のようなことが挙げられます。

戦略爆撃のルール †

迎撃されずに都市や地形改善に対しての戦略爆撃に成功した場合について。(CvUnit::airBomb())

まず、修正爆撃力を次の式で求めます。
修正爆撃力 = 基本爆撃力*現在HP/最大HP

戦略爆撃したタイルが都市だった場合、都市防御が修正爆撃力分だけ減ります。

地形改善されているタイルだった場合、次の2つの乱数を求めます。


つまり、ポイントとしては次のようなことが挙げられます。

意見・感想・要望など †



*1 航空機は何度迎撃を行っても「迎撃済み」フラグは立ちません
*2 航空機以外はダメージに関わらず一定
*3 GlobalDefines.xmlのMAX_INTERCEPTION_DAMAGEで定義されている
*4 GlobalDefines.xmlのMIN_INTERCEPTION_DAMAGEで定義されている
*5 GlobalDefines.xmlのINTERCEPTION_MAX_ROUNDSで定義されている
*6 GlobalDefines.xmlのAIR_COMBAT_DAMAGEで定義されている
*7 CIV4ImprovementInfos.xmlの<iAirBombDefense>