エンジニアが書いてるようなブログ

ゲームプログラマをやっています。仕事やゲームや趣味に関してつらつら

Model View Presenter をゲームで使う3つの方針

おひさしぶりです。最近ゲームづくりを再開いたしました。

> 自由と言われても、何もやる気が起きない。制限された自由の中にほんとうの自由はある

ということで、いきなりゲームを作っても何も方針がなければ挫折することは目に見えています。

そこで、今回はWEBアプリ作成時によく用いられるMVP(Model View Presenter )のパターンをゲームに適応したいと思います。

MVP とは?

MVPとはSIerやWEBアプリ界隈でもちいられていたオブジェクト指向プログラムの設計手法です。それぞれ以下のような意味合いを持っています。

Model

ユーザーや商品などの振る舞いや定義などを持っているものです。これだけでは振る舞いを定義しているだけなので使用することができません

View

ボタンの大きさやテキストの内容などの見栄えに関わる部分を担当する

Presenter

入力に対してなにか動作を行うもの、基本的には入力があった際にModelにアクセスして所定の処理を行い、View に対して見栄えの情報(ユーザー名など)を送ります。

実装方法としてはそれぞれがクラスとして定義されている場合、PresenterがViewをもっており、Presenter内で入力を受け取るイベントを定義しておき、入力に対して適宜Modelとやり取りをおこなって、最終的にViewのパラメータを変更します。

ゲームで表す MVP

ゲームでよくあるキャラクター選択画面をイメージしてください。キャラクタをタップすると、選択状態の枠が付与される形です。今回は画面をMVPで定義したいと思います。

f:id:tkymx83:20180603181842p:plain

Model
  • キャラクター情報:名前や画像、場合によってはモーションなどが紐付いている可能性があります。
  • デッキ情報:複数体のキャラクターをまとめたデッキです。選択状態のキャラクターがデッキに格納されます。
View
  • キャラクターアイコン:キャラクタの画像があればアイコンを出すことができます。
  • 選択の枠:選択されている位置に対して枠の画像を設定します。
Presenter

全体の処理となります。キャラクタがタップされた際に以下の順で各要素にアクセスします。

  • キャラクターをタップ:タップされたキャラクタがわかります。
  • デッキに対してキャラクタをセットする:Modelへアクセスして情報の格納をします。
  • 選択の枠の位置を変更する:Viewに対して情報を格納します。

おわりに

いろいろはなしましたが、結局は規律を自分で決めて実装することで以下のようなメリットがあります。

・共通部分をくくりだすことで作業効率化を図れる
・スタートダッシュが早くきれる
・一定の知見が溜まっているので問題が起きにくい(起きても検索できる)

設計はプログラム界の知見なので、使わない手はないと思います。