JavaScriptでつくるレトロなゲーム 万引少年。このページではオープニングと店内における処理を実装します。

動作確認はこちら

Openingクラス

では最初にオープニングの処理をするOpeningクラスを示します。といっても動きがないので簡単な処理しかしていません。

opening.js

Storeクラス

次にメインのStoreクラスを示します。が、その前に座標を管理するためのPositionクラスを示します。

store.js

初期化

ではStoreクラスのコンストラクタを示します。

store.js

ゲームを開始するときにInitGame関数が実行されます。スコアを0に戻して店内を初期化します。

InitStore関数は店内を初期化するための処理をおこないます。

制限時間を300秒にセット、警備員と少年の座標を初期位置に戻します。そして商品を並べます。

InitItems関数は商品を初期の位置に並べます。

警備員を移動させる

タイマーイベントが発生したら警備員を移動させます。どちらもMoveK関数が呼び出されます。GameStatusを調べて左右に移動するのか下に移動するのかを切り分けます。

MoveK関数は警備員を移動させます。

警備員を左右に移動させる処理です。端にいるときは画面外に移動しないようにチェックしています。

少年を移動させる処理

少年を移動させる処理を示します。キーが押されたらその方向に移動可能であれば移動させます。キーを押しっぱなしで連続移動できないようにメンバ変数keyDownを使って制御しています。またGameStatusがGAME_STATUS_STEALでない場合は処理はおこわれません。

左右に移動できない場合はそこに商品が置かれているかもしれません。その場合は盗めるかを確認します。

CanBoyMove関数は少年が引数として渡された座標に移動できるかを調べます。

SteelRightItemIfCan関数とSteelLeftItemIfCan関数は、商品が左右にあるかどうかを調べて存在する場合は盗む処理をおこないます。少年の手の動きを表現するため、盗んだときは0.1秒のあいだメンバ変数のStealRightSucceededとStealLeftSucceededをtrueにしています。そのあと再描画をおこない、0.1秒後に手を元の位置に戻して再描画しています。

StealSucceeded関数は盗んだあとの処理をおこないます。スコア加算と効果音の再生、ステージクリアの判定をおこないます。

盗んだ結果、すべての商品がなくなったらステージクリアです。GameStatusをGAME_STATUS_CLEAREDに変更して残り時間に50を乗じた値をボーナスポイントとして追加します。

描画処理

キャラクタの座標を変更しても描画処理をしなければ意味がありません。ここからは描画処理を解説します。

最初にReplaceString関数を示します。これは第一引数で渡された文字列から第二引数を先頭に第三引数分の文字を削除して第四引数の文字列を挿入します。

再描画に必要な文字列を取得して再描画をする処理を示します。

GetStringItems関数はメンバ変数の文字列 StoreFieldStringに店内に存在する商品を入れた文字列を返します。

GetStringDrawK関数はGetStringItems関数が返した文字列を引数とし、警備員の姿が入った文字列を返します。

GetStringDrawBoy関数はGetStringDrawK関数が返した文字列を引数とし、少年の姿が入った文字列を返します。

GetScoreString関数はスコアと残り時間を表示するために必要な文字列を返します。