これまで線路プレートと目覚まし時計の移動と描画の処理をしてきましたが、今回はゲームとして完成させます。

動作確認は こちらから

Window: load イベント時の処理

ページがロードされたらMain関数を実行します。ここでやっているのはシーンの作成、光源の設定、レンダラーを作成、線路プレートと目覚まし時計を生成してシーンに追加する処理です。

線路プレートを生成してシーンに追加する

線路プレートを生成してシーンに追加する処理を示します。

乱数を生成してシーンに追加する線路プレートを決めます。縦移動だけ、横移動だけというプレートが多くなるとゲームがやりにくいのでNSWE型やNESW型、NWSE型が出現しやすくしています。また余裕をもってプレイを開始できるように、目覚まし時計の初期位置は固定し、最初はある程度線路が繋がっている状態にしておきます。InitTrackPlates関数の戻り値は目覚まし時計の初期位置にある線路プレートです。

目覚まし時計を生成してシーンに追加する

次に目覚まし時計を生成してシーンに追加する処理をする関数を示します。

更新処理

setInterval関数によってUpdate関数が1秒間に60回呼び出されます。このときにおこなわれる処理を示します。

現在時刻を取得してゲーム開始時に取得しておいた値(後述)と比較して経過時間を求めます。これをスコア代わりに表示させます(後述)。ゲームオーバー時は時間の計測は停止され、目覚まし時計の移動もされません。

ゲーム開始とゲームオーバー時の処理

ゲームスタートのときはスタート時刻を取得し、ゲームオーバーのときはゲームオーバー時の音を鳴らします。またisGameOverフラグをセットして線路プレートの移動操作ができないようにします。

キーが押されたときの処理

キーが押されたときの処理を示します。ゲームオーバーでなければ線路プレートの移動処理がおこなわれます。実際に移動することができた場合は音を鳴らします。

再挑戦するときの処理

再挑戦するときの処理を示します。線路プレートと目覚まし時計をシーンから取り除き、新しく生成しなおします。

文字列を表示させる処理

文字列を表示させる処理を示します。

HTMLは以下のようになっています。

document.getElementById関数でドキュメント要素を取得して、そこに文字列を描画します。

動作確認は こちらから