前回、C#で作成したクラッシュローラーをJavaScriptに書き直します。今回は通路の作成とプレイヤーの移動の処理をおこないます。

素材

画像として以下を使います。

入手元

「やさぐれひよこ素材」置き場
ぴぽや倉庫

また音源として以下を使います。

BGM ステージクリア時の効果音 ミス時の効果音 ゲームオーバー時の効果音 敵を倒したときの効果音 ローラー使用時の効果音

入手元

魔王魂

HTML部分

まずHTML部分を示します。

map.jsは以下の画像をもとに各ピクセルを数字に置き換えたものです。これが二次元配列mapに格納されます。

map.js

ここからダウンロード可能です。

定数

JavaScriptの定数部分を示します。その意味するところはコメントのとおりです。

main.js

初期化の処理

Init関数で初期化の処理をおこないます。Canvasのサイズの設定をおこない描画ができるようにします。

ClearVisits関数はプレイヤーがその座標を通過したかどうかを管理する二次元配列を初期化する処理をおこなうためのものです。

InitPlayerPosition関数はプレイヤーの座標を初期化する処理をおこなうためのものです。

描画処理

DrawClear関数はCanvas全体を黒で塗りつぶす処理をおこなうためのものです。

通路の描画

DrawRoad関数は通路を描画するためのものです。青でやや大きめの矩形を描画して、これを通路とそうでない部分の境界線とします。そのあとそのなかを白で塗りつぶします。またプレイヤーが通過した座標に相当する部分は緑色で塗りつぶします。

通路と通路が交わっている部分の上側(「橋」)を描画する処理をおこないます。DrawBridgeNS関数は南北にかかる橋、DrawBridgeWE関数は東西にかかる橋の描画をおこないます。あとは普通の通路を描画するときと同じ処理をおこないます。

プレイヤーの描画

DrawPlayer関数が呼び出されるとプレイヤーの描画がおこなわれます。

橋の開始部分がすでにプレイヤーが通過した部分であっても橋を描画するときに白で塗りつぶされる場合があります。ReDrawBridgeEdgeIfNeed関数はすでに通過した部分を再度緑色で塗り直します。

上側にあるものを前面に描画する

IsInMap関数は配列の範囲外にアクセスしないようにするために事前に確認するためのものです。

ReDrawPlayerIfNeed関数は橋の上にプレイヤーがいる場合、再度描画することでプレイヤーが橋の下に隠れてしまわないようにするためのものです。

Draw関数は上記の描画関数を呼び出して描画処理をおこないます。関数を呼び出す順番に注意します。下にあるものから順に描画処理をおこないます。

プレイヤーの移動処理

キーがおされるとフラグをセットして移動できる方向のフラグがセットされているときだけ方向転換の処理をおこないます。基本的にプレイヤーは立ち止まることはできません。壁にぶつかって前進できない場合はその場に停止します。

プレイヤーの移動方向を設定する

SetPlayerDirect関数はフラグの状態とプレイヤーの座標をしらべてプレイヤーの移動方向を取得して、変数 playerDirectにセットします。

移動処理

MovePlayer関数はplayerDirectに格納されているデータに従ってプレイヤーを移動させます。通路の端に来たら反対側にワープさせます。またスコア加算の処理もおこないます。

効果音とBGMの再生

効果音とBGMを再生する処理を示します。ゲームが開始されたらBGMを再生し、ゲームオーバーになったら停止します。最後まで再生されたかどうかはisPlayingBgmフラグの状態で調べます。再生が完了したらisPlayingBgmはfalseになるので、毎回ゲーム中かどうかしらべて、ゲーム中であるにもかかわらずisPlayingBgmフラグがfalseになっていたらBGMの再生が完了したとみなしてもう一度最初から再生します。

PlayBGMIfNeed関数は、もしゲーム中であるにもかかわらずisPlayingBgmがfalseならば、もう一度再生する処理をおこなうためのものです。

StopBGM関数はBGMを止めます。

ゲーム開始と更新処理

InitStage関数はゲーム開始時やステージクリア時にステージを初期化するためのものです。

GameStart関数はもじどおりゲームを開始するときに呼び出されます。

Update関数はタイマーをつかって一定間隔で呼び出される関数です。いまはプレイヤーを移動させ描画処理をおこない、必要であればBGMを再生します。

タイマーの操作

StartTimer1関数はUpdate関数を呼び出すためのタイマーを開始するためのものです。引数を変えることでUpdate関数を呼び出す間隔を変更できるようにしています。

StopTimer1関数はUpdate関数の呼び出しを停止するためにタイマーを停止させるためのものです。

まだ作成していませんがプレイヤーがローラーを使用しているときは加速処理をおこないます。MovePlayer2関数はそのときの処理をおこないますが、いまは中身は空にしておきます。

StartTimer2関数とStopTimer2関数は、MovePlayer2関数を呼び出すためのタイマーを開始させたり停止させるためのものです。

ページが読み込まれたら初期化の処理をおこない、最初の描画処理をおこないます。Sキーがおされたらゲーム開始となります。