Pipeline and Filters Patternについて勉強してみる その2

はいどーもこんにちは、本日もPipeline and Filters Patternを勉強してみたいと思います。
前回の記事を前提として進めるので、まだの方はそちらもご覧ください。

T型を別の型にしてみる

前回の記事ではT型をIEnumerable<Diary>型にしました。
今回はもっとシンプルにstring型を使ってみます。
基本は前回と同じなので、一気にフィルタを貼ります。

ReverseFilterは文字列を逆にするフィルタです。
UppercaseFilterは文字列を大文字にするフィルタです。
DecorateFilterは文字列を指定された文字列で囲むフィルタです。
AlphanumericFilterは文字列を英数字のみにするフィルタです。

使ってみる

作ったフィルタをさっそく使ってみます。
こんな感じ。

与えたフィルタによって結果が変わるのがよくわかりますね。
これは特に「加工された結果は単純であるけれど、過程は複雑」である場合に力を発揮するのではないかなと思いました(加工部分が完全に一つのクラスとして独立しているため)。
もちろん色々な組み合わせを作れる=変更に強いのも魅力ですね。
ここまで書いてみて、Decoratorパターンに似てるなーと思わないでもありません。

ゲームのプレイ評価に使えそう

さて前回の記事で「ゲーム制作においてどのように応用するか?」と書きました。
これなのですが、例えば「プレイ評価」に使えそうだなと思いました。

1.プレイ評価はゲーム制作中に基準がコロコロ変わる(例えば評価方法を付け足したり、外したり)
2.プレイヤーの難度設定によって評価基準を変えたい場合がある
3.ゲームによっては加点方式になったり減点方式になったりする

この辺を加味した場合、今回のパターンが使えるのでは? と思ったわけです。
例えば1ですが、これはフィルタを変えればよいでしょう。
元作っていた評価の処理を変える必要はなく、ただフィルタを付け足したり外したりするだけでOKです。

2も簡単ですね。難度設定によってパイプラインを分けておけばよいだけです。
例えばイージーモードでは全体の評価基準に1.2を掛けるが、ハードモードでは0.9を掛ける、なんか簡単に、それもわかりやすく実装できそうです(ただこれ、掛けるタイミングによって結果が変わる気がするので、その辺りのバランスを考えるのはゲーム制作者の腕の見せどころな気がしました)。
もちろん、共通の評価方法として使えるフィルタは使い回すこともできます。
いやあ素晴らしい。

加点方式と減点方式については、要は加点方式なら「0点の状態」を基準にフィルタにかけていけばよいわけです。
減点方式ならばその逆で「100点の状態」を基準にフィルタをかけていけばよいわけです。
す、すばらしー!

終わりに

本日は前回の記事の復習と、ゲーム制作でどのように活かしていくかを考えてみました。
ただ考えたと言っても、本当に考えただけで実際に評価システムを組み込んだわけではないため、いろいろと問題が発生する場合があるかもしれません。
というか多分発生しますw
その辺は経験が大事なんだろうなあということで、本日の記事を終わります。

ほなまた。
お仕事も募集中ですよ。

フォローする