これまで有名なゲームを真似したものしか作ってきませんでしたが、今回は完全オリジナルのゲームを作ってみました。その名も「ワイはあの娘とつながっているんや!」

どんなゲームかというとこんなゲームです。

主人公は「あの娘」と赤い糸でつながっていて(実はそう思い込んでいるだけw)上からハサミが降ってきます。ハサミにあたると糸がダメージをうけ耐久度が0になると切れて「あの娘」はどこかへ飛んでいってしまいます。そして今日もめでたくフラれてしまうというメチャクチャなゲームです。

糸は時間の経過とともに長くなっていきますが、アイテムを取ると糸の耐久度が上がったり糸が短くなってゲームオーバーになりにくくなる仕様になっています。

では、さっそくつくってみましょう。

HTML部分

HTML部分を示します。

style.css

定数とグローバル変数

JavaScript部分の定数とグローバル変数を示します。

Playerクラスの定義

プレイヤーを描画するためにPlayerクラスを定義します。プレイヤーは主人公の周りを「あの娘」が回っているという通常とは変わった形態なのでMainX、MainYとSubX、SubYという二つの座標を定義します。また両者の距離、「あの娘」の回転角、糸の耐久度、移動方向などのプロパティも定義します。

更新処理部分を示します。

フラグを参照して移動中であるのであれば移動させます。ただしフィールドの外に移動してしまわないように注意します。そのあと「あの娘」を少しずつ遠ざけながら主人公の周りを回転させます。そして糸の耐久度が0の場合は「あの娘」を遠心力で遠くへ飛んでいくように移動させます。

GetHitJugePositions関数は当たり判定に使う座標の配列を返します。当たり判定の対象が自機ではなくふたつの点をつなぐ線分なので中心からの距離が32の倍数でthis.Distanceを超えない点の座標を複数用いています。

プレイヤーを描画する処理を示します。糸の耐久度が1以上の場合は糸を描画します。耐久度が高い場合は太く描画します。また糸の耐久度と「あの娘」との距離も描画します。

EnemyクラスとItemXクラス

敵とアイテムを描画するためのクラスを定義します。まず基底クラスになるCharcterクラスを定義します。

引数は初期のXY座標とXY方向の移動量です。

Enemyクラス、Item1クラス、Item2クラスを以下のように定義します。Draw関数で描画するイメージが違うだけです。

続きは次回。