ブルーノのC#プログラミング & unity勉強日記

プログラミング素人、ブルーノの自主勉強ノートです。他のプログラミングを勉強したい方の助けになれば幸いです。その他趣味の雑記もしていきたいです

デリゲート/イベントの復習・応用

f:id:covory10101101276:20171205185835p:plain

みなさんこんにちは🌚

上の画像、マリーナ・ベイというシンガポールの高級ホテルらしいんですがなんか屋上に船が刺さってるみたいですね。FF7のゴールドソーサーを思い出しました(笑)

さて今回はデリゲートの総まとめということでちょっとした一桁限定の加算プログラムを組んで見たいと思います。キーボードから数字が入力されるとその値を足していき、cキーを押すと合計をクリア、xキーでプログラムを終了する、といったものです。早速まずはプログラムを書き、紐解いていくことにしましょう

f:id:covory10101101276:20171205193229p:plain

f:id:covory10101101276:20171205193243p:plain

f:id:covory10101101276:20171205193250p:plain

3つのクラスがこのプログラムにはあります。

Bruno079 →イベントを発生させるクラス

Bruno080 →イベント発生時に呼び出される、つまり起こるプログラム

Bruno081 →これらを準備し、実際に行うプログラム(入力されたキーが終了かどうかはここで判別する)

 

こう書くと単純に見えますね。Bruno081クラスには見慣れないキーワードがいくつもあるので少し混乱してしまいますが。ではメインメソッドの中身に沿って説明していきます。

  • 43行目:ユーザーへの説明
  • 44行目:ConsoleKeyInfo構造体は押されたキーを記述(情報を取得と同義?)します。これを定義。
  • 46,47行目:イベントを実行するクラスとイベントの内容をインスタンス化。
  • 49行目:イベントフィールドにイベントハンドラを設定。

ここまでが準備ですね。そしてwhileループの中身です。

  • 53行目:if(Console.KeyAvailable)というのはキーが押されている場合という意味です。押されていないとき(KeyAvailableがfalseの時)は何も起こりません。
  • 55行目:押されたキーの情報をReadKeyメソッドで取得します。この引数のtrueというのは入力された情報を表示しないという意味です。そして取得した情報はcki構造体に送られます。
  • 56~60行目:cki構造体に送られた文字がxの場合プログラムを終了します。
  • 62行目:ようやくここまで通過したキーの情報をConsoleKeyInfo構造体のKeyCharプロパティにより一桁のunicode文字を49行目のHandlerデリゲートを通してイベントフィールドに返します。

と、こうなります。めっちゃ長かったですね〜😩😂でもおかげでメインメソッドはとてもスッキリしましたね!!デリゲートをもし使わなかったらこのクラスの内容がややこしく膨大なものになっていたでしょう。今回はここまでにしておきます。

 

このブログを書いていると時間があっという間に経ってしまいますがとても楽しいです。今回やったのなんてまさにゲーム開発の基礎っぽいですよね。早く開発して見たいなあ