ぷよぷよプログラミングをGodotで実装 03 コード理解(player.js)
はじめに
前回に引き続きぷよぷよプログラミング
を利用して、Godot
でパズルゲームの作り方の基礎を一緒に学んでいこうと思います。YouTubeでもこの記事の内容に沿ってゲームを作っているので、動画を見ながら取り組んでみてください。
前回の記事はこちら
利用教材
この記事で学ぶこと
godotを触る前にまずはぷよぷよプログラミングのソースコード(javascript)について解説をしていきます。
今回は主にplayer.js
について解説します。
player.js の概要
このクラスでは、ぷよの配置や移動、消去のロジックが実装されています。ゲームの進行を管理し、プレイヤーがぷよを積み上げて消していく過程を処理します。
player.js の構成
プロパティ
centerPuyo
中心ぷよの色を保持するためのプロパティ。新しいぷよが生成されるときにランダムな色が割り当てられます。
movablePuyo
動くぷよの色を保持するためのプロパティ。新しいぷよが生成されるときにランダムな色が割り当てられます。
puyoStatus
現在のぷよの位置や状態(座標、回転角度など)を保持するためのプロパティ。ぷよの動きや回転を管理します。
centerPuyoElement
中心ぷよの画像要素を保持するためのプロパティ。HTML要素としてのぷよを操作します。
movablePuyoElement
動くぷよの画像要素を保持するためのプロパティ。HTML要素としてのぷよを操作します。
groundFrame
ぷよが地面に接地しているフレーム数をカウントするためのプロパティ。ぷよの接地状態を管理します。
keyStatus
プレイヤーのキーボード入力状態を保持するためのプロパティ。キーが押されているかどうか(左、右、上、下)を管理します。
actionStartFrame
移動や回転アクションの開始フレームを保持するためのプロパティ。アクションの進行状態を管理します。
moveSource
移動元のぷよの位置を保持するためのプロパティ。移動アニメーションの開始位置を設定します。
moveDestination
移動先のぷよの位置を保持するためのプロパティ。移動アニメーションの終了位置を設定します。
rotateBeforeLeft
回転前のぷよの左側の位置を保持するためのプロパティ。回転アニメーションの開始位置を設定します。
rotateAfterLeft
回転後のぷよの左側の位置を保持するためのプロパティ。回転アニメーションの終了位置を設定します。
rotateFromRotation
回転前のぷよの角度を保持するためのプロパティ。回転アニメーションの開始角度を設定します。
メソッド
initialize
目的
キーボードやタッチ入力の状態を初期化し、イベントリスナを登録します。
主要な処理
-
keyStatus
オブジェクトを初期化して、キーボードの入力状態(左、右、上、下キー)を管理します -
keydown
イベントリスナを登録し、キーが押されたときにkeyStatus
を更新します -
keyup
イベントリスナを登録し、キーが離されたときに keyStatus を更新します -
touchend
イベントリスナを登録し、タッチ入力が終了したときにkeyStatus
をリセットします -
gesture
関数を定義し、タッチジェスチャーによってkeyStatus
を更新する。
入力方法とイベントリスナの紐付けを行っています。
Godotで作る時は一旦キーボード入力だけで実装しようと思います。
createNewPuyo
目的
新しいぷよを生成し、ステージに配置できるかどうかを確認します。
主要な処理
- ステージの上部(左から3つ目の列)が空いているか確認して、空いていない場合は新しいぷよを配置できないため
false
を返却します。 - 新しいぷよの色をランダムに決定します
- 新しいぷよの画像要素を作成し、ステージに追加します
- 新しいぷよの初期配置を設定(中心ぷよは左から2列目、画面上部から出現)します
-
setPuyoPosition
メソッドを呼び出して、ぷよの位置を設定します
スタート位置が左から3つ目とハードコーディングになっているので、Godot化する際は列の数に合わせて変動するようにしようと思います。
setPuyoPosition
目的
ぷよの現在の位置を画面上に設定します。
主要な処理
- 中心ぷよの位置をスタイルプロパティを使って設定します
- 動くぷよの位置を計算し、スタイルプロパティを使って設定しています
ぷよの描写を行うために呼び出されるから、ぷよの作成時や移動した際に呼び出されます。
falling(isDownPressed)
目的
ぷよが下に自由落下するかどうかを判断し、必要に応じて落下速度を調整します
主要な処理
- 下にブロックがあるかどうかを確認します (
isBlocked
) - 下にブロックがなければぷよを自由落下させ、下キーが押されている場合は加速します。
- 境を超えた場合は再チェックし、得点を加算します
- ブロックにぶつかった場合、ぷよの位置を調整して接地を開始します
groundFrame
プロパティを用いて接地状態を管理し、接地が完了すると true
を返します。
playing(frame)
目的
プレイヤーの操作状態を管理します
主要な処理
-
falling
メソッドを呼び出して自由落下を確認します - 下キーが押されている場合、自由落下を加速します
- 左右キーが押されている場合、左右に動かせるかどうかを確認します
- 回転キーが押されている場合、ぷよを回転させることができるかどうかを確認します
moving(frame)
目的
ぷよが移動中の状態を管理します。
主要な処理
-
falling
メソッドを呼び出して自然落下を確認します - 移動の進行状況を計算し、ぷよの位置を更新します
- 移動が完了した場合は
false
を返します
rotating(frame)
目的
ぷよが回転中の状態を管理します。
主要な処理
-
falling
メソッドを呼び出して自然落下を確認します - 回転の進行状況を計算し、ぷよの位置と回転角度を更新します
- 回転が完了した場合は
false
を返します
fix
目的
現在のぷよをステージ上に固定します。
主要な処理
- ぷよの現在の位置をステージ上に設定し、ぷよをカウントします。
- 操作用に作成したぷよ画像を削除します
batankyu
目的
ゲームオーバー時に上キーが押されたらリロードします。
主要な処理
- 上キーが押された場合、ページをリロードします
まとめ
このコードはぷよの生成と操作の制御について学んでいきました。
JavaScriptの分析もあともう少しで完了です。
次の記事がJavaScript回の最後になると思います。
Discussion