JavaScript 都道府県対抗 戦国シミュレーションゲーム(3)の続きです。前回はプレイヤーの県にターンが回ってきたときの処理を実装しましたが、今回はそれ以外の県にターンが回ってきたときの処理を実装します。

自県ではない県のターン

自分の県ではない県にターンが回ってきたときはコンピュータが次の行動を決めますが、その県にプレイヤーの県が攻め込んでいる場合があります。その場合はプレイヤーに行動を決定させる処理が必要です。またそれ以外の県の侵攻をうけている場合も考えられます。(1)プレイヤーが他県に侵攻していてその県にターンが回ってきた場合、(2)プレイヤーではない他県に侵攻していてその県にターンが回ってきた場合、(3)いずれでもない場合にわけて考えます。

守備側の援軍を合流させる処理

守備側の援軍がきた場合、これをさきに合流させます。

他県に侵攻していてその県にターンが回ってきた場合

他県に侵攻していてその県にターンが回ってきた場合、コンピュータ側が次の行動を先に決定します。兵力と兵糧の状態から適切な行動を選択するべきですが、ここでは兵糧がもたない場合は包囲を破るべく野戦に打って出る、そうではない場合はランダムに静観するか野戦に打って出るかを決めています(今後改良の余地あり)。

コンピュータ側が突撃してきた場合

コンピュータ側がプレイヤー側の包囲を破るべく野戦に打って出る処理を示します。

ランダムに包囲側と守備側の兵数を減らしていき、その途中経過も表示させます。どちらかが0になったら終了です。勝った場合は県庁の所有権がプレイヤー側にうつり、負けた場合は兵糧を奪われます。

静観する場合

コンピュータ側が静観した場合、プレイヤーは[静観する], [敵の状態を表示], [突入する]のいずれかを選択することになります。

以下は[静観する]を選択したときにおこなわれる処理です。静観すると兵数と同じ兵糧が消費されます。兵糧が足りない場合は静観はできません。突入する以外、選択はありません。

敵の状態を表示する

[敵の状態を表示]を選択したときにおこなわれる処理を示します。突入を選択すると不利な戦いをすることになるのでそれがわかるようなメッセージを表示させています。

突入時の処理

[突入する]を選択したときにおこなわれる処理を示します。

突入する場合は立て籠もっている側が3倍有利です。3:1の割合で突入側と守備側の兵数を減らしていき、その途中経過も表示させます。どちらかが0になったら終了です。勝った場合は県庁の所有権がプレイヤー側にうつり、負けた場合は兵糧を奪われます。

プレイヤー以外が侵攻している県にターンが回ってきた場合

プレイヤー以外が侵攻している県にターンが回ってきた場合は、(1)守備側は包囲側に突撃するか?(2)包囲側は県庁に突入するかの順に次の行動を決定して処理をおこないます。コンピュータ同士の戦闘は詳細は表示しないでどちらが勝ったかだけを表示します。

侵攻されていない県にターンが回ってきた場合

侵攻されていない県にターンが回ってきた場合は0.8の確率でとなりの県に攻め込みます。動員するのは最大でその県の兵数の半分です。また兵糧は2ヵ月分強をもっていきます。ただし侵攻に必要な条件がない場合は開発か徴兵をおこないます。

自県ではない県のターンの処理

上記で定義した関数をつかってプレイヤーではない県にターンが回ってきたときの処理を定義します。