Pipeline and Filters Patternをゲーム制作に使ってみる

はいどーもおはようございます。
本日はPipeline and Filters Patternをゲーム制作に応用してみる、もとい前回の記事でチラッと話したプレイ評価に使ってみようと思います。

完成形

今回はRPGツクールMV(JavaScript)を使おうと思います。
この理由は、単に「すでに評価に使えそうな要素が揃っている」ためです。
ただし実際のゲーム開発では、プレイ評価の方法は千差万別でしょうから、色々と自分で「評価の対象となる数値の記録」をしておく必要があるかなと思います。

最初に完成形での使用方法を見てみます。
というわけでコードをドン。

C#で書いたバージョンとほとんど同じですね。
Evaluation型のコンストラクタに渡しているのは「パーティ情報」「システム情報」「ハードモードか否か」の3つです。

Pipelineを作る

というわけで作成していきます。
PipelineもC#版と全然変わりません。
こんな感じ。

リストの代わりに配列を使ったくらいですかね。

評価する内容を作る

お次は「input」として渡すものを作成します。
すなわち評価する内容です。
今回はこんな感じ。

battleScoreとjourneyScoreにモニョモニョと評価結果を加算したり減算したりすることを意図しています。
評価対象自体もさることながら、構造も結構適当なので、実際に作るときはもう少し丁寧に考えた方があとあといいのかなーと思いました。
まあ今回は実験なのでこんなもんで。

評価するクラス

最後にフィルタの役目を果たすクラス(今回の場合は評価するクラス)を作成していきます。
というわけで一気にコードをドン。

最初にも書きましたが、評価の方法は適当ですw
こちらで試したところ、評価点数が6000点とか行きました。これは使いにくいですね。
ですがコードが動くかどうかを実験するだけなら十分です。

これらのコードを使って評価をしたい場合、一番最初に作っておいたevaluationScoreをゲーム内で実行してやればOKです
具体的にはjourneyScoreとbattleScoreを利用して「Sランク!」とか「Aランク!」とか表示できるかもしれませんね。
あと今回はやっていませんが、「高い数値のときはXXXのコメント」「低い数値のときはXXXのコメント」とかをそもそもこのパイプラインを通して組み立てて行くのもありなのかなーとちょっと思いました。
パイプラインに登録するフィルタを変更すれば、評価結果も当然変わります。
これは変更に強い作りじゃないかなーと思いました。

妄想の話

ここからは単なる妄想ですが、例えばプラグインパラメータで評価方法をあらかじめ設定しておいて、それを読み込んでpipelineに登録すれば、わりと簡単に評価結果を作れるんじゃないかなーなんて思いました。
これなら非プログラマの方でも簡単に使えていいかも? と思いました(が、Evaluatorに相当するクラスをどうやってプラグインパラメータから作って読み込むのかが問題かも。C#ではもっとキツイ?)。
というのも、「評価結果」のバランスを考えるのは多分、プログラマではなく別の方である場合が多いはずだからです。
その別の方が「評価結果」を得る仕組みをちょっと変えて試したいとき、いちいちプログラマに「これちょっと変更してよ」とお願いするのは双方ともに負担でしょう。
なのでプログラマの作業と非プログラマの作業を完全に分離できたら嬉しいんじゃないかなあと、そう思ったわけです。
まあこれは「評価結果」のプログラムに限らずなんでもそうだと思うので、「作業の分離」はちゃんとやっておきたいですね。
ウーン僕も気をつけたいです。

終わりに

今回はPipeline and Filters Patternをゲーム制作に使ってみたらどうなるか? というものを考えてみた記事でした。
ボチボチ何か作りたいですねえ。
というか実は「コマンド入力形式バトル(スパロボリンクバトラーで距離の概念なくしたバージョン)」作ろうかなあなんて計画している途中です。
仕様書はボチボチ完成してきているのですが、既存のバトル系プラグインが全く使えなくなる予感しかしないので、需要がなあと若干悩んでいる感じです。

ほなそんな感じでまた。
お仕事も募集中です。

フォローする