JavaScript 鳥が羽ばたく壁避けゲームをつくる(準備編)の続きです。今回はゲームとして完成させます。

最初にHTMLを示します。

style.css

グローバル変数と定数

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

index.js

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

ページが読み込まれたときの処理を示します。canvasのサイズを調整し、画像ファイルの読み込み、イベントリスナーの追加をおこないます。

ゲーム開始の処理

ゲーム開始時におこなわれる処理を示します。

配列に格納されているデータをクリアし、プレイヤーの座標を初期値に戻します。プレイ開始時は前回の羽ばたきの座標は存在しないのでundefinedを代入します。ガイドと壁を生成し、isPlayingフラグをセットします。スタートボタンを非表示にして羽ばたくためのボタンを表示させます。

createGuide関数とcreateWalls関数、getPositionY関数は前回示したものとまったく同じです。

羽ばたく動作

プレイヤーが羽ばたいたときに行なわれる処理を示します。

連続でボタンを押しても最低1秒は経過しないと処理を受け付けないようにします。また処理がおこなわれたときは効果音を鳴らします。

更新処理

更新処理を示します。

1秒間に60回更新処理をおこないますが、isPlayingフラグがfalseのときはなにもしません。

更新時はプレイヤーのX座標を1大きくしてY座標を求めます。そして壁とガイド(ただし表示する設定の場合のみ)、プレイヤーの描画をおこないます。このときプレイヤーが常にcanvasの左側に描画されるように全体を平行移動してから描画します。そのあと当たり判定をおこないます。

drawWalls関数を示します。前回示したものと違ってX座標を(playerX – DRAW_PLAYER_X)だけ左にズラしています。

drawGuide関数を示します。これも前回示したものと違ってX座標を(playerX – DRAW_PLAYER_X)だけ左にズラしています。

プレイヤーを描画するためのdrawPlayer関数を示します。矩形だけでなく鳥のイメージも合わせて描画します。

当たり判定とゲームオーバー時の処理

当たり判定をする処理を示します。当たり判定の対象となる壁があるか調べて、ある場合はその穴の一番上の座標と下の座標、プレイヤーのY座標を比較して壁に当たっているかを調べます。壁に当たっている場合やcanvasの上下からはみ出した場合はゲームオーバーです。当たった部分に×を描画し、更新処理を停止させます。

ゲームオーバー時の処理を示します。