ウドPの倉庫スマートフォン専用ページを表示ウドPの倉庫2018年08月03日diplomacy移動判定プログラム2(輸送経路ってなんだよ編)これのつづきです。現状のフローチャートのおさらい。支援するユニットAをピックアップし、Aのいる地域に移動を試みるユニットBがある場合、Aの支援をキャンセルする。「Aが支援するユニットCが、Bのいる位置に移動を試みており、なおかつB以外に移動を試みるユニットがない場合」を除く。三角支援ユニット以外のすべての支援ユニットに対して支援を適用し、ユニットのパワーを算出する。三角支援ユニットのいる地域の行動解決を行う。三角支援ユニットの支援結果を適用し、ユニットのパワーを算出する。↓すべての地域に対して行動解決を行う。今回はここの太字の話です。輸送まわりにはいろんな(プログラムを作る上では面倒な)ルールがあるわけです。それらを見ていきましょう。・輸送を行うユニットは、追放されれば輸送を失敗する。これはまぁ、読んで字のごとくです。難しい判定は要りません。・輸送を用いずに移動できる地域においても、輸送を用いて行うことが出来る。こんなことをする理由があるのかと思われるかもしれませんが、これを用いることでユニットの交換を実現できます。実用性はさておき、ルールに書いてあるんだから実装しないわけにはいきません。輸送を行うユニットを走査して、移動を上書きする必要があります。・輸送経路が複数存在する場合、ルートがどれか一つでも成立すれば、輸送は成功する命令書は輸送経路を明確に指定しないので、プログラム側で輸送経路をリストアップしてあげる必要があります。Nap-Tun何が何でもチュニスに輸送したいイタリア軍がいました。この場合考えられる輸送経路はnap-tys-tunnap-ion-tunnap-tys-ion-tunnap-ion-tys-tunの4通りです。実際には、先に追放されるユニットを経路から排除してから走査することになるでしょう。追放されてないユニットを経由するルートを走査する↓ルートがなければ、輸送は失敗するBを通らないルートがあれば、輸送は成功し、Aへの支援カットが成功するBを通らないルートがなければ、支援カットは失敗となる、Bに対する判定を改めて行い、Bが追放されなければ、輸送は成功するとなります。輸送経路の判定は、支援を加味しないとできなさそうです。そんなわけで、フローチャートを改良しましょう。支援するユニットAをピックアップし、Aのいる地域に移動を試みるユニットBがある場合、Aの支援をキャンセルする。「Aが支援するユニットCが、Bのいる位置に移動を試みており、なおかつB以外に移動を試みるユニットがない場合」を除く。1つめはBを維持に変更する。