インターフェイスを勉強したい

はいどーもこんにちは。
本日はインターフェイスを勉強していきたいと思います。
今回はステートパターンを使っていきたいと思います。

あ、ちなみに解説とかはほとんどなく、僕が書いたコードを貼り付けてるだけです。
あくまでも僕が勉強したいだけの記事です。

疑似戦闘を作ってみる

何を作ろうかと考えたとき、やはり馴染みがあるものはRPGです。
ちゅーわけで擬似戦闘をC#のコンソールアプリケーションで作ってみました。

以上のコードをコピペしたあと、Mainメソッドをこんな感じで書いてみてください。

実行すると疑似戦闘が始まり、何かのキーを押すたびにダメージを受けます。
瀕死状態になると、毎ターン追加で5ダメージを受けます。死亡するとゲームがやり直しになります。
また、一定の確率でリジェネ状態(ターンごとの回復状態)になったり、毒状態(追加ダメージを受ける状態)になったりします。また、この状態は同じく一定の確率で元に戻ります。

なお、瀕死状態から死亡状態に移ったあと、さらにもう1ターン経過しないと死亡判定がおこなわれません。
テスト用プログラムなので、このへんの挙動は適当です。

インターフェイスを使うと何が嬉しいのか

今回はキャラクターの状態の部分にICharacterStateインターフェイスを使っています。
GameCharacterクラスのRefreshStateメソッド内でICharacterStateインターフェイスのメソッドが呼ばれていますね。
この部分が実際に呼ばれるときには、インターフェイスではなく具象クラスのメソッドが呼ばれます。
例えばNormalStateやDyingStateですね。
このNormalStateやDyingStateの中に個別の振る舞いを閉じ込めているので、状態をいくつ追加してもGameCharacterクラスの複雑さが増大することはありません。
これが今回インターフェイスを使うメリットの一つですね(状態を表すクラスを用いずにif文で条件を増やしていくと、GameCharacterクラスがどんどん複雑・巨大になってしまって見通しが悪くなるし、あとで機能を追加するのもやりにくい)。

ついでに少しだけ触れておくと、AdditionalStateプロパティがリジェネ状態や毒状態を表しています。これもICharacterStateインターフェイスを利用していますよ。

終わりに

本日は完全なる自己満足記事で、解説もほぼゼロでした。
たまにはこういう記事があってもよいでしょう。
ほなそんな感じでまた。

フォローする