釘を飛び越えて消していくパズルをつくる(1)の続きです。今回はGameクラスを実装します。

Gameクラスの定義

Gameクラスを定義します。

コンストラクタ

最初にコンストラクタを示します。ここでやっているのはCellオブジェクトとNailオブジェクトの生成、フラグ等の初期化、描画に必要なDOMオブジェクトの取得、更新処理の開始です。

CellオブジェクトとNailオブジェクトの生成

CellオブジェクトとNailオブジェクトを生成する処理を示します。

釘の表示位置を変更する

釘の表示位置を変更する処理を示します。第一引数で渡されたNailオブジェクトの表示位置を(cx, cy)に変更します。

効果音の再生

効果音を再生する処理を示します。

更新と描画

更新処理と描画処理を示します。

更新処理は描画と消費時間の計測、HowToPlayの文字列を移動をおこないます。

消費時間を表示する処理を示します。

ゲーム開始時の処理

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

QuestionGeneratorクラスのGenerate関数を実行すると問題となる文字列(+答え)が返されます。この文字列にあわせて釘を配置する処理を示します。

釘を移動させる処理

釘を移動させる処理をするうえで必要になる関数を先に示します。

釘を指定した座標に移動させる処理を示します。移動は瞬時に移動するのではなく滑るように移動させます。

クリア判定の処理を示します。存在する釘が1本だけになり、その位置が最下段中央(12番マス)であればクリアです。クリアしたらスコアランキングにタイムとプレイヤー名を登録します。

サーバー側の処理とスコアランキングを表示させる処理は後述します。

マスがクリックされたときの処理

マスがクリックされたときにおこなわれる処理を示します。

マスがクリックされたときはどのマスも選択されていない場合はクリックされたマスを選択状態とします。すでに選択されている場合は選択されている位置にある釘をクリックされた位置に移動させるとともに飛び越えられた釘を消去します。そしてこれを移動履歴に追加します。

もし適切ではない動作(釘がないマスを移動元として選択しようとした、釘があるマスを移動先として指定しようとした、移動する釘と飛び越えられる釘が色違いになっていない、など)がおこなわれようとしたら警告音をならすとともに、なぜその操作は不可なのか理由を表示させます。

ひとつ前に戻す処理

ひとつ前の状態に戻す処理を示します。

移動元が選択されている状態であれば非選択の状態に戻します。非選択であれば移動履歴が保存されている配列からpopされたデータから前の状態に戻します。

ギブアップ時の処理

ギブアップ時の処理を示します。

問題が生成されたときに答えをGame.Answerに保存しているので、これを元に解を表示したあとゲームオーバー処理をおこないます。

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

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

Gameオブジェクトを生成してイベントリスナを追加します。

レンジスライダーでボリューム調整をするための処理を示します。

スコアランキングの表示

ゲームクリア時の処理でjsonがサーバー側に送信されますが、サーバー側でおこなわれる処理を示します。

サーバー側の処理

ranking.php

HTML部分

HTML部分を示します。

ranking.css

ranking.js