今回は、戦闘シーンを追加してみます。といっても、実際の戦闘処理は入れないで単にメッセージを出すだけですが。
戦闘シーンには、乱数で突入するようにしました。具体的には、移動した時のスクロール処理の最後で乱数を発生させ、16分の一の確率で戦闘シーンに突入します。つまり、16歩に一度の確率で戦闘シーンに突入するわけです。
if (rand() % 16==0) // 1/16の確率で戦闘発生 battle();
戦闘シーンでは、戦闘のメッセージを出して「闘う」か「逃げる」かを前回作成したダイアログで選択します。これを、「逃げる」が選択されるまで続けましょう。
void battle() { message("敵と遭遇!"); wait(); message("どうしますか?"); while (dialog("闘う","逃げる")==1) { message("戦闘処理"); wait(); message("どうしますか?"); } drawScreen(); }
この関数は、「敵と遭遇!」メッセージを出した後は、「逃げる」が選択されるまでひたすらダイアログとメッセージを出しつづけます。実際の戦闘では、逃げ切るか決着がつくまで、同じように戦闘処理を繰り返す事になるでしょう。メッセージを出すたびにwait()関数でリターンキー入力を待っています。
と、今回は短いですがここまでです。イベント処理と戦闘シーンの「流れ」が出来た事で、だいぶゲームらしくなってきましたね。
カーソルキーで上下左右に移動できます。戦闘シーンに突入したら、リターンキーでメッセージの確認とダイアログの選択を行ってください。終了する時には、戦闘シーンやメッセージが表示されていない状態でエスケープキーを押してください。
プログラムをコンパイルする時には、DirectX5以上のSDKをインストールする必要があります。ソースをダウンロードしたら、拡張子をcppにしてプロジェクトの設定でddraw.libをリンクしてからビルドしてください。