リスト7●ダメージを計算してメッセージやステータスの表示を更新する
リスト7●ダメージを計算してメッセージやステータスの表示を更新する
[画像のクリックで拡大表示]
リスト3●クラスからインスタンスを作成するコード
リスト3●クラスからインスタンスを作成するコード
[画像のクリックで拡大表示]
リスト8●メインのタイムラインから戦闘画面を呼び出す関数startBattleと,戦闘画面が呼び出されたときに最初に実行される関数initBattle
リスト8●メインのタイムラインから戦闘画面を呼び出す関数startBattleと,戦闘画面が呼び出されたときに最初に実行される関数initBattle
[画像のクリックで拡大表示]

ダメージを計算して
ステータスの表示を更新する

 攻撃対象を選択できたところで,ダメージを計算してメッセージを表示し,ステータスの表示を更新する処理を記述します。それぞれの処理は,battleStep2関数,showMsg関数,showStatus関数で行います(リスト7[拡大表示])。冒頭で,参照画面への参照を代入するMovieClip型の変数BWを定義していることにも注意してください。この変数は,メインのライムラインのコードから戦闘画面を呼び出すのに利用します。なお,この時点で,リスト3[拡大表示]のコードは,myPartyとenemiesの変数定義の部分だけを残して,それ以外の部分はアクション・パネルから削除しておいてください。

 関数battleStep2では,攻撃者と攻撃対象を引数として受け取り,引数とdefenceメソッドを使って算出されたダメージに基づいてメッセージ・キューにメッセージを追加し,関数showMsgを呼び出します。関数showMsgは,キューが空になったら関数showStatusを実行し,次の順番の攻撃へと処理を進めるために,関数battleStep1を呼び出します。キューから取得した文字列が「処理終了」だった場合には,戦闘画面を終了します。

 関数showStatusでは,インスタンスstatus0~status2内のテキストを更新し,敵と味方の戦闘可能状態のチェックを行い,戦闘が終了したかどうかを判定しています。敵か味方のどちらかが全滅している場合はそれを伝えるメッセージをメッセージ・キューに格納し,末尾に戦闘終了を指示するための「処理終了」と言う文字列を追加します。これで一連の戦闘処理の作成は完成です。

マップ画面から戦闘画面を
呼び出す

 最後に,作成した戦闘画面をマップ画面(_root)から呼び出す処理を記述しましょう。戦闘を何回か行う場合には,味方の体力などの情報は保持しておき,敵の体力などの情報は戦闘ごとに新規に作成するようにするのがよいでしょう。そこで,味方のインスタンスの情報はマップ画面のタイムラインで管理し,戦闘画面を初期化する際にその情報を参照するようにします。メインのタイムラインにリスト8の(1)[拡大表示]のコードを追加します。さらに,シンボルbattleWindowのタイムラインに記述したinitBattle関数内で,味方の情報はメインのタイムラインから参照するように修正します(リスト8の(2))。

 コードの追加と修正が終わったら,メインのタイムラインにボタンを配置し,ボタンが押されたら関数startBattleを呼び出すコード

on(press){
startBattle()
}

を記述してください。ここまでできたら,ムービープレビューで動作を確認してみましょう。ボタンを押すごとに,戦闘画面が呼び出されることが確認できます。味方の情報は,1回の戦闘が終わっても次回の戦闘時にきちんと保持されていることもわかります。今回作成した処理を,前回作成したマップ画面に組み込んだFlashドキュメントもご用意しました。興味のある方は,日経ソフトウエアのサイト(http://software.nikkeibp.co.jp/software/)からダウンロードして,コードを確認してください*12
☆     ☆     ☆

 前回,今回と2回にわたってRPGの移動処理と戦闘処理を作成しました。今回は,コードが意図通りに実行されているかどうかを確認するために,敵キャラや,攻撃処理時に乱数を使用することをしませんでしたが,乱数を加えることで,バリエーションのある戦闘画面も作成できますね。イベント処理を加え,効果音やアニメーションなどを加えてみると,オリジナルのRPGも作成できます。ぜひ,チャレンジしてみてください。

下記のURLから、サンプル・プログラムを無償ダウンロードできます。
http://software.nikkeibp.co.jp/software/download/down05c.html#200503