2018年08月03日

diplomacy移動判定プログラム2(輸送経路ってなんだよ編)

これのつづきです。



まずは現状のフローチャートのおさらい。

すべての輸送を用いて移動するユニットに対して、輸送経路を確定する

支援するユニットAをピックアップし、Aのいる地域に移動を試みるユニットBがある場合、
Aの支援をキャンセルする。ただし
「Aのいる地域に移動するユニットが、Aと同じ国のユニットであった場合」
「Aが支援するユニットCが、Bの輸送経路に移動を試みている場合」
「Aが支援するユニットCが、Bのいる位置に移動を試みており、なおかつB以外に移動を試みるユニットがない場合」
を除く。3つめに関して、ユニットAを記録し、便宜上「三角支援ユニット」とよぶ。

三角支援ユニット以外のすべての支援ユニットに対して支援を適用し、ユニットのパワーを算出する。

三角支援ユニットのいる地域の行動解決を行う。

三角支援ユニットの支援結果を適用し、ユニットのパワーを算出する。

すべての地域に対して行動解決を行う。

今回はここの太字の話です。


輸送経路の判定ってそんなに面倒?とも思うわけですが、
輸送まわりにはいろんな(プログラムを作る上では面倒な)ルールがあるわけです。
それらを見ていきましょう。

・輸送を行うユニットは、追放されれば輸送を失敗する。
これはまぁ、読んで字のごとくです。難しい判定は要りません。

・輸送を用いずに移動できる地域においても、輸送を用いて行うことが出来る。
わざわざこんなことをする理由があるのかと思われるかもしれませんが、
これを用いることでユニットの交換を実現できます。
実用性はさておき、ルールに書いてあるんだから実装しないわけにはいきません。
輸送を行うユニットを走査して、移動を上書きする必要があります。

・輸送経路が複数存在する場合、ルートがどれか一つでも成立すれば、輸送は成功する
命令書は輸送経路を明確に指定しないので、
プログラム側で輸送経路をリストアップしてあげる必要があります。
例を上げれば…
A Nap-Tun
F tys C A Nap-Tun
F ion C A Nap-Tun
何が何でもチュニスに輸送したいイタリア軍がいました。
この場合考えられる輸送経路は
nap-tys-tun
nap-ion-tun
nap-tys-ion-tun
nap-ion-tys-tun
の4通りです。
実際には、先に追放されるユニットを経路から排除してから走査することになるでしょう。


これを考えると、

輸送経路候補のユニットに対して、それぞれ行動判定を行う
このうち、輸送先ユニットAが、輸送経路Bに移動しようとするユニットCを支援しているなら、Bに対する判定は保留とする

追放されてないユニットを経由するルートを走査する

ルートがなければ、輸送は失敗する
Bを通らないルートがあれば、輸送は成功し、Aへの支援カットが成功する
Bを通らないルートがなければ、支援カットは失敗となる、
Bに対する判定を改めて行い、Bが追放されなければ、輸送は成功する

となります。

どうやら輸送経路の判定は、支援を加味しないとできなさそうです。
そんなわけで、フローチャートを改良しましょう。


支援するユニットAをピックアップし、Aのいる地域に移動を試みるユニットBがある場合、
Aの支援をキャンセルする。ただし
「ユニットBが、Aと同じ国のユニットであった場合」
「ユニットBが、輸送を用いて移動してくる場合」
「Aが支援するユニットCが、Bのいる位置に移動を試みており、なおかつB以外に移動を試みるユニットがない場合」
を除く。
1つめはBを維持に変更する。
2つめに該当するユニットを、便宜上「被輸送支援ユニット」と呼ぶ。
3つめに該当するユニットを、便宜上「三角支援ユニット」とよぶ。

三角支援ユニット、被輸送支援ユニット以外の
すべての支援ユニットに対して支援を適用する。

輸送を行うユニットに関して、行動解決を行う。
このとき、被輸送支援ユニットが支援するユニットが、
輸送経路上のユニットDの位置に移動を試みている場合、
解決を行わず、後回しにする。

Dが存在せず輸送ルートが存在する場合、Dを通らない輸送ルートが存在する場合
→輸送は成功し、上記ユニットの支援はカットされる。
Dを通る輸送ルートのみが存在する場合
→輸送阻止支援ユニットの支援はカットされない。Dについて行動解決を行い、輸送の成否を判定する。
輸送ルートが存在しない場合
→輸送は失敗となる。支援はカットされない。

被輸送支援ユニットの支援結果を適用する。

三角支援ユニットのいる地域の行動解決を行う。

三角支援ユニットの支援結果を適用する。

すべての地域に対して行動解決を行う。

だいぶ長くなりましたが、糸口が見えてきました。まだ続きます。
ウド | 2018/08/03 18:01| Comment(0) | 日記
この記事へのコメント
コメントを書く
コチラをクリックしてください