JavaScriptでドラゴンクエストのようなRPGをつくる(1)の続きです。

MapFieldクラスの定義

前回はフィールドを描画するためのクラスの基底クラスを定義しました。今回はこれを継承してフィールドを描画するためのMapFieldクラスを定義します。

コンストラクタを示します。引数の文字列が渡されたら二次元配列に分解してArrMapに格納します。そして配列の縦横のサイズをRowMaxとColMaxに格納します。

Init関数はプレイヤーの初期位置をセットするためのものです。

Move関数は基底クラスで定義したものを使うのですが、城の出入りの処理があるので、その部分は独自に定義したものを使います。

StopPlayer関数はプレイヤーの動きを止めるためのものです。これはメンバ関数ではありません。

PlayBgm関数はBGMを再生し、StopBgm関数はBGMを停止します。

MyCastleクラスの定義

プレイヤーが自分の城にいるときの移動と描画処理をおこなうためのMyCastleクラスを定義します。

コンストラクタを示します。

Move関数は基底クラスで定義したものを使うのですが、城の出入りと王に話しかけたときの処理があるので、その部分は独自に定義したものを使います。

王女様に話しかけるとメッセージが表示されて、HPとMPが回復します。処理が二重に開始されないようにtalkingフラグで制御しています。

EnemyCastleクラスの定義

プレイヤーが魔王の城にいるときの移動と描画処理をおこなうためのEnemyCastleクラスを定義します。

コンストラクタを示します。

Move関数は基底クラスで定義したものを使うのですが、城の出入りと魔王に話しかけたときの処理があるので、その部分は独自に定義したものを使います。

魔王に話しかけるとメッセージが表示され、戦闘になります。処理が二重に開始されないようにtalkingフラグで制御しています。

これらのクラスからインスタンスを生成します。自分の城と魔王の城は構造は同じで王座にいるキャラクタが違うだけなのでその部分だけ置換します。

そしてプレイヤーを初期座標にセットします。

描画の処理

描画処理をするためのDraw関数を示します。プレイヤーがフィールド上や城にいるときは定義したクラスのDraw関数で描画処理をおこないます。戦闘時の描画処理は後述する自作関数でおこないます。

ザコ敵とボスとの戦闘時の描画処理を示します。

戦闘中は移動用のボタンは非表示とします。コマンド選択用のボタンは必要であるとき(showCommandButtonsフラグがtrueのとき)のみ表示させます。

移動処理

移動に関する処理を示します。キー操作だけでなくボタンが押されているときも移動処理をおこないます。

まず移動用のボタンに’touchstart’、’touchend’、’mousedown’、’mouseup’のイベントリスナを追加します。押されたらフラグをセットして離されたらクリアしているだけです。

タイマーでどの移動フラグがセットされているかで移動の処理を行ないます。