動作確認はこちらからどうぞ。

これまで敵の動作だけ考えていました。プレイヤーの操作ができなければゲームにならないので、そのための処理を考えます。

基本的にボタンをクリックするとゲームが進行します。自分のターンになったら選択できる行動がボタンで表示されます。終わったら敵のターンとなり、その動作結果が一行ずつ表示されます。[次へ]ボタンをおすことで次のメッセージが表示されます。

ゲーム中の状態でクリックできるボタンがかわります。そこでボタンを表示させたり隠すメソッドを示します。

これはゲームがまだ開始されていないときと終了したときに[ゲーム開始]ボタンを表示させるためのメソッドです。

これは進軍、徴兵、徴税、開発、静観のコマンドボタンを表示させるためのメソッドです。

敵の城を包囲しているときにターンが回ってきたら兵糧攻めを継続するか強行突入をするかを決めなければなりません。これは[突入]と[静観]のボタンを表示させるメソッドです。

敵が城を包囲しようとしているときやすでに包囲されているとき、城から出撃して敵と戦うことができます。以下は[反撃]ボタンを表示させるメソッドです。

ターンが自分とは無関係な城であったり戦闘の状況が表示されているときは[次へ]ボタンしかクリックできません。これは[次へ]ボタンのみを表示させるメソッドです。

次に実際にボタンがクリックされたときの処理を示します。

まず[スタート]ボタンがクリックされたときの処理を示します。

ゲームがスタートすると各城にターンが回ってくる順番をランダムに決めます。

ゲーム開始段階では1570年3月です。1ターン3ヵ月です。GetYearMonthメソッドはターンの回数から現在の年と月を求めます。

ゲームが開始されるといきなり自分の順番になることがありますが、ほとんどの場合は他の敵のあとになります。最初は[次へ]ボタンしかクリックできません。

[次へ]ボタンをクリックするとbtnNextClickメソッドが実行されます。するとShowSituationメソッドによって、Situationオブジェクトのリストである_situationsに格納されたメッセージが次々と表示されます。ShowSituationメソッドはターンと城の状態 「信長の野望」もどきを改良するを参照してください。

Turnメソッドのなかでプレイヤーの城やプレイヤーが関与している城の処理が終わったら、その城のCastleStatusオブジェクトがCurentCastleStatusに格納されます。[次へ]ボタンを押し続けてリストのなかのメッセージがすべてなくなったらShowSituationメソッドのなかでPlayerActionメソッドが呼び出されます。

PlayerActionメソッドは以下のようになっています。城の状態が通常なのか、敵に攻め込まれようとしていたり包囲されているかでクリックできるボタンを表示して関係のないボタンを非表示にします。城の状態が通常であれば進軍できる城を選択できるようにする、城の兵数をしらべて進軍できる兵数を選択できるようにします。

長くなるのでPlayerActionというクラスを作成しました。これにともなってフィールド変数をpublicに変更しました。

PlayerActionクラスは以下のようになります。

PlayerAction.PlayerCastleNormalメソッドはプレイヤーの城が通常の状態のときにターンが回ってきたときの処理をおこないます。進軍、徴兵、徴税、開発、静観のボタンをクリック可能にして進軍の対象になる城のリストを表示するとともに送ることができる兵数を選択できるようにします。

PlayerAction.PlayerCastleDangerousメソッドはプレイヤーの城が攻め込まれようとしているときや包囲されている状態のときにターンが回ってきたときの処理をおこないます。反撃、静観のボタンをクリック可能にして出撃できる兵数を選択できるようにします。

進軍の対象になる城のリストを表示します。

進軍の対象になる城のリストをクリアします。

移動、出撃できる兵数のリストを表示します。

移動、出撃できる兵数のリストをクリアします。

btnMarchClickメソッドは[進軍]ボタンがクリックされたときの処理をおこないます。味方の城に進軍すると移動、敵の城に進軍すれば戦争になります。

戦争を仕掛けるときは敵の城のCastleStatus.AttackingCorpsプロパティに作成した軍団オブジェクト corpsをセットします。また移動の場合は移動先の自分の城のCastleStatus.SupportCorpsに軍団オブジェクト corpsをセットします。実際に兵が移動先に到着するのは移動先の城にターンが回ってきたときです。

ボタンがクリックされると[次へ]ボタン以外はクリックできないようにして、Turnメソッドを呼び出してゲームを進めます。

btnConscriptionClickメソッドは[徴兵]ボタンがクリックされたときの処理をおこないます。自分の城の兵を増やします。デバッグしやすくするために自分に都合がいい数字にしています(敵は徴兵しても10も増えない)。

そのあとゲームを進める処理は上記のものと同じです。

「徴税」ボタンがクリックされたときの処理です。これもデバッグしやすくするために自分に都合がいい数字にしています。

「開発」ボタンがクリックされたときの処理です。CastleStatus.Develop()が実行されて収穫量がアップします。

btnWaitClickメソッドは「静観」ボタンがクリックされたときの処理をおこないます。ただし敵が攻め込もうとしているにもかかわらず何もしないと敵に包囲されてしまいます。勝算もないのに下手に反撃するよりは味方の援軍が到着するのを待つのもひとつの作戦かもしれません。

次に突入や反撃などのコマンドボタンが押されたときの処理を示します。

「突入」ボタンが押されたときに呼び出されるメソッドを示します。

これは「反撃」ボタンが押されたときに関連するメソッドを示します。