JavaScript 都道府県対抗 戦国シミュレーションゲームをつくる(1)の続きです。

グローバル変数と定数

グローバル変数と定数を示します。

ページが読み込まれたときの処理

ページが読み込まれたときの処理を示します。

まずBGMをエンドレスで再生できるようにします。使用する音源は開始から118秒まで再生して最初に戻るようにするといい感じに聞こえるのでそのようにしています。各自で他の音源を使用するときは適切な設定にしてください。

[START]ボタンがクリックされたらゲーム開始です。ボタンがクリックされたらゲーム開始の処理をするようにイベントリスナを追加します。

ゲーム開始の処理

[START]ボタンがクリックされたらゲームを開始する処理を示します。

まず[START]ボタンを非表示にします。そして前回既出のinitKens関数でKenオブジェクトを初期化します。そのあとプレイヤーに担当する県を選択させてゲームループに入ります。ゲームが終わったらゲームループから抜けるので現在ターンがきている県の情報を非表示にして、[START]ボタンを再表示させます。

ボリュームの初期設定

initVolume関数はボリューム調整に関する初期設定をおこないます。レンジスライダーを操作したときにボリューム調整できるようにするのと[テスト]ボタンをクリックしたときに設定したボリュームで効果音とBGMを再生できるようにしているだけです。

効果音の再生と停止

効果音再生/停止に関する処理を示します。

playNoticeSound関数はメッセージが表示されるときの通知音を鳴らします。

playPerishedSound関数は大名が滅亡(自他同様)したときの効果音を鳴らします。

playFightSound関数は戦闘中の音(刀がぶつかり合うような音)を鳴らします。時間を指定して鳴らす場合とstopFightSound関数が実行されるまで繰り返し再生される場合の2つを用意しています。

sleep関数は引数の時間だけ待機します。

ゲーム開始の処理

ゲームを開始したらプレイヤーに自分が担当する大名を選択させます。その処理を示します。

県名が書かれているボタンをもつ要素を選択してユーザーがボタンをクリックしたら選択できるようにしているのですが、北海道と沖縄県以外は○○地方の下の階層にあります。また偵察コマンドでも同じ要素を使い回すのでその処理のぶんだけ複雑になっています。

ゲームループ

担当する大名の名前が決まったらゲームループに入ります。

メッセージの表示

showMessage関数はゲームの進行にかんするメッセージを表示するためのものです。これは普段は非表示になっているmessage要素のinnerHTMLプロパティに文字列をセットして一時的に表示させます。

showButtonがtrueのときはボタンをクリックするまで表示されたままになります。そうでない場合はmsで指定された時間がすぎると自動的に非表示になります。

県情報の表示

showCurKenInformation関数は各県の情報を表示させます。

ゲームオーバー・クリア時の処理

checkGameClear関数はゲームクリアのときtrueを返します。ゲームクリアとは各県のOwnerNameがすべてplayerOwnerNameになったときです。

checkPerished関数は引数で渡された名前の大名が滅亡したときにtrueを返します。大名が滅亡したとは各県のOwnerNameのすべてが引数の文字列ではなくなった場合で、他県に侵攻している軍のOwnerNameのなかにも引数の文字列が存在しなくなった場合です。

checkGameOver関数はゲームオーバーのときtrueを返します。ゲームオーバーになっているかどうかはcheckPerished関数にplayerOwnerNameを渡せばわかります。

ゲームオーバーになったときにおこなわれる処理を示します。この場合は県の情報を更新したものを表示し、BGMを停止し、滅亡の効果音を鳴らします。そのあと自分自身の滅亡とゲームオーバーを示すメッセージを表示するとともにゲームオーバーの効果音を鳴らします。

ゲームクリアのときにおこなわれる処理を示します。この場合は県の情報を更新したものを表示し、BGMを停止し、ゲームクリアの効果音とメッセージを表示します。