HOME > ActionScript > テトリスアルゴリズム > ゴーストブロック

ゴーストブロック

テトリミノの影

ゴーストブロックとは落下中のテトリミノが一番下へ落ちた場合の落下予定位置に、テトリミノの影のようなものが表示される機能です。

ソースファイル pt12.zip

処理自体は「11. ハードドロップ」の探索とほぼ同じですので、今回はゴーストブロック機能のオン/オフボタンも追加しています。
ボタンについての説明は割愛しますが、オン/オフの切り替えはゲームスタート前に限定しています。その為にButtonCreaterクラスのソースも少し変更しましたが、やっつけな感じの変更です。

ハードドロップとゴーストブロック

ハードドロップとの違い

ゴーストブロックの処理はゴーストブロックを描画する座標を探索してフィールドデータに反映しておくことです。そしてゴーストブロックはテトリミノが一番下へ落下した場合の位置へ描画します。はっきり言いまして、この座標探索処理自体はハードドロップの探索処理と殆ど同じです(main.asファイル 1279行目 updateGhostLocation()関数)。

ただ、ハードドロップとの違いについては理解しておかないと無駄な処理を行ってしまうので注意が必要です。
ハードドロップとの大きな違いは「探索処理が実行されるポイント」です。
ハードドロップは下移動の一つなので、「下へ移動する」時に座標の探索処理を実行します(今回の場合SPACEキーが押された場合)。
これに対しゴーストブロックは常に描画する必要があるので、常時座標を知っておく必要があります。ただし一度座標を見つけた後は、次に左右移動や回転するかしない限り再度座標を取得する必要はありません。これは下方向へ動くだけの場合にはゴーストブロックの形と位置は変わる事がないからです。
この事からゴーストブロックの座標探索処理の実行は「左か右に動いた時」と「回転した時」に必要だと言う事がわかります(main.asファイル 715行目と732行目、828行目)。

そしてもう一つ実行する必要があるポイントが、フィールドに新しいテトリミノが配置された時です。この時は全くキー操作をしていない状態ですので、新しいテトリミノがフィールドに配置されたタイミングで、ゴーストブロックの座標も新しく探索する必要があります(main.asファイル 543行目)。

実行ポイントを定めたら、残る追加は描画処理だけです。これはfieldMapping()を少し修正するだけで完了です。
ゴーストブロックの機能がオンになっている場合には、ゴーストブロックの描画やクリアも一緒に行うようにしておきます(main.asファイル 1138行目、1147行目)。

座標の再利用

ゴーストブロックとハードドロップは処理自体が同じでも実行されるポイントが違うと言う事がわかりました。
つまるところ処理の計算結果を利用する方法と場所が違うと言うだけですので、ゴーストブロックで探索した実行結果「座標」はハードドロップでも利用可能です。
ですので、ゴーストブロックの機能がオンになっている時にはハードドロップでは探索処理を行わずにこのゴーストブロックの描画座標を利用する事にします。すでに座標がわかっているのにハードドロップの為に同じ処理を実行するのはもったいないので楽させてあげます。
と言っても、私が楽になるわけではありませんが。

動作確認

動かない時はFlash画面上を一度クリックしてみてください。
ゲームスタート前に「GHOST ON」ボタンを押してグレー表示にしておくとゴーストブロックは表示されなくなります。

Flashファイルをご覧いただくためには、
アドビシステム株式会社のフラッシュプレーヤー(Flash Player)が必要です。
インストールされていない方は下のボタンから、最新版が無償で入手できます。

Adobe Flash Playerのダウンロード

ソースファイルについて

ソースファイルはasファイルのみです。

使用する環境としてはFlashIDE(動作確認はSC4のみ)を想定していますので。適当に用意したflaファイルに、ダウンロードしたソースファイルをドキュメントクラスとして適切に設定すれば問題無く動作します。
また、コーディングはFlashDevelopを使用して行っておりますので、プロジェクト内にファイルを適切に配置、もしくはクラスパスを設定するなどすればFlashDevelopだけでも問題なく動作します。Stageサイズは幅420px、高さ500pxです。
申し訳ありませんが、ご質問等にはお答えできませんので、ご使用は環境に合わせて各自行ってください。

TOP