おもしろそうな動画をみつけたので真似をしてC#で「信長の野望」もどきを作ってみます。

面白いかどうかは別にして乱数をつかって敵を動作させればゲームっぽいものは簡単にできそうです。プログラミングを覚えた当初は嬉々としてこんなプログラムを作成して、周囲の人をあきれさせていました。

もちろんBの名前は嫌いな人の名前にします。どうです?最悪でしょう。

いまからつくる「信長の野望」もどきはブラウザアプリでもつくってみたいのでメッセージボックスやダイアログがでてくるようなものにはしたくありません。自分の行動を決めるときだけ必要なボタンをおして、あとはEnterキーをおすとメッセージがひとつずつでてくるファミコンのようなゲームをつくってみたいと考えています。

そこでこのようなコードを作成してみました。

攻撃ボタンをおすと乱数が生成され、これが敵に対するダメージになります。自分の攻撃がおわると敵の攻撃です。やはり乱数を生成して、これを自分に対するダメージとします。また防御すると体力が10回復します。

処理の結果、表示するメッセージはstringのリストであるMessagesのなかにAddしていきます。自分の行動を決定すると表示するメッセージがすべて表示されてしまうまで次のコマンドの入力できないようにしています。

「次へ」のボタンをおすと自作メソッド ShowFirstMessage()が呼び出されます。ShowFirstMessageメソッドでは一番最初にAddされたメッセージから表示されます。表示されたメッセージはリストから取り除かれます。メッセージリストが空になったらお互いのLifeが0以下になっていないか調べます。もしどちらかが0以下になっていれば戦闘は終了です。対戦結果と「闘いは終わった!」というメッセージを表示させます。

どちらもLifeが0よりも大きい値の場合は戦闘継続です。コマンド入力後、いったん非表示にしていた「攻撃」「防御」ボタンを表示させ、つぎの行動をユーザーに入力させます。

ところで攻撃にしても防御にしてもおたがいのLifeは最後にならないと表示されません。自分が攻撃した結果が表示されたときに表示されている敵のLifeが減り、敵に攻撃されたときにはその結果が表示されたといに自分のLifeが減るようにしたいものです。

これを実装するためにはMessagesからメッセージのリストを表示するときにそのときの状態を表示する仕様にしなければなりません。Messagesに格納するのは文字列だけでなく、自分と敵の状態もそのときに格納しておかないといけないということになります。

そこでフィールド変数の

はやめて、ほかの方法を考えます。

Situationsというクラスを作成します。いま状況を表示するうえで必要なのは、自分と敵のLife、表示するメッセージだけです。そこでこんなクラスを作成します。

そしてフォームクラスにおける以下のようにします。

今回はアプリケーションの準備作業であり、信長の野望とはぜんぜん関係ない内容でした。次回からは信長の野望っぽいものをつくります。