2016年11月25日

クラスいらないんじゃないか問題

es6にアップデートしてclass構文なんか手に入れて、これで手に馴染んだオブジェクト指向でのゲーム開発ができるぞ!と意気込んでいたところ
大変残念な問題が。

セーブ・ロードとの相性が悪い。


ゲーム情報のセーブとロードは、面倒くさいからJSON.parseとかJSON.stringifyに丸投げしてたんですよ。
ゲームのセーブデータをそのまま人間にわかりやすい構造化テキストにするなんて何事とか思うかもしれないけど、まあセーブデータ改竄とかチートなんてネットプレイするわけでもなきゃ気にならないし、そもそもゲームブックっていくらでもチートOKのところで人間に運用をまかせてゲーム楽しむような部分があるじゃないですか。
なんで、JSONテキストファイルからの読み書き1行で面倒なデータ構造のやりとりができて俺天才じゃね?なんて悦に浸っていたんですが、うっかりパーソナルデータとアイテムデータがクラスのインスタンスであることを忘れていた

何が問題か。インスタンスは自分でメソッドを持っているんだけど、JSONはメソッドなんてない。つまりセーブデータ形式に変換する時点でメソッドが消えてしまうわけだ。
具体的にはパーソナルデータは技量点の計算式(原技量点と武器点を加算するあたり)、アイテムデータは表示まわり(武器タイプには武器名と武器ポイントを表示)

これを解消するためにデータ読み込み時にnewしたインスタンスに値を一つずつ埋めていくという方式もあって、仕事のC++だったらそうするけどこれ自前のwebアプリでやったらJSON.parse使う意味ないよね。なんでクラスのメソッドは全部クラス外に追い出してユーティリティ関数として実装することにした。

これ、クラスの意味ないじゃん!ほとんどコンストラクターを使うためだけに残すことになった。なんじゃこりゃ。

所詮小物のゲームアプリ作成に手に馴染んだクラス指向の言語を使うのは大げさすぎということが無事わかりましたベイベー
ま、今度unity+C#でプログラミングすることになった場合じっくり考えよう

posted by LoyalTouch at 07:06| Comment(0) | TrackBack(0) | ゲーム | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック