- 1. スクラッチでウェーブ召喚タワーディフェンスの作り方!ペアリスト辞書と先頭削除トリック入門 (いまここ)
さぁ、スクラッチでナニ作る!?
動画で見てみよう
チュートリアルの元になった作品
今回の目標
スターター作品をリミックスしよう
このチュートリアルにはスターター作品があります。使わなくても大丈夫だけど、最低限の素材などが用意されてるので便利です。
スターター作品をダウンロード
#1データの初期化
準備
スプライト「stage」を開く
| スプライトについて |
|---|
| ゲームの背景とウェーブデータ・敵の種類データを管理するステージ |
リスト「■ウェーブ」の追加
召喚する敵の順番を格納したリスト(ゴブリン→ゴブリン→オーク→ボスの順)
リスト「■敵の種類名」の追加
敵の種類名一覧(ゴブリン・オーク・ボス)
リスト「■敵のHP」の追加
各敵の種類に対応するHP値のリスト
リスト「■敵のスピード」の追加
各敵の種類に対応する移動スピードのリスト
実装
が押されたときのあとに( )のすべてを削除するを4つ並べて、全リストをクリアしよう。ゲームを再スタートするたびに前回のデータが残らないようにする、お約束の初期化処理だよ。
#2敵の種類データを登録
「■敵の種類名」リストに「ゴブリン」「オーク」「ボス」の順で( ) を ( ) に追加するして、「■敵のHP」にも対応するHP(10、20)を同じ順番で追加するよ。リストの1番目同士、2番目同士が対応しているのがポイントだね。
#3スピードとウェーブの登録
「■敵のHP」にボスのHP(50)を追加し、「■敵のスピード」にゴブリン(3)、オーク(2)、ボス(1)の移動スピードを登録しよう。HPが高い敵ほどスピードが遅い――ゲームバランスの基本だね。最後に「■ウェーブ」リストへ最初の出撃メンバー「ゴブリン」を追加するよ。
#4ウェーブ順序の完成
「■ウェーブ」リストに「ゴブリン」「オーク」「ゴブリン」「ボス」の順で追加するよ。最終的にゴブリン→ゴブリン→オーク→ゴブリン→ボスの順で敵が登場するんだ。コードをいじらず、リストの中身を変えるだけで出撃パターンを自由に組めるのがこの仕組みの強みだね。
#5司令官の初期配置
準備
スプライト「司令官」を開く
| スプライトについて |
|---|
| ウェーブデータをもとに敵を順番に召喚する司令官スプライト |
| どんな役割か |
| スペースキーを押すとウェーブリストの順番通りに敵を召喚する仕組みを作るよ。敵の種類ごとにHPとスピードを設定して、1体ずつ順番に送り込む仕組みだよ。 |
実装
が押されたときで旗が押されたら画面左上(x:-180、y:130)に移動して、( ) と ( ) 秒言うで「スペースキーで召喚開始」と2秒間表示するよ。プレイヤーへの操作ガイドだね。
#6敵スプライトの工場化
準備
スプライト「敵」を開く
| スプライトについて |
|---|
| WAVEリストに従って画面上部から下に向かって移動する敵スプライト |
| どんな役割か |
| 召喚メッセージを受け取って自分のクローンを生成し、種類に応じたコスチュームに切り替えて画面上から下へ移動する敵を作るよ。クローンを使ってたくさんの敵を出すのがポイントだよ! |
変数「クローン判定」を追加
このスプライトがクローンかどうかを示すフラグ(1=クローン、0=オリジナル)
実装
が押されたときで「クローン判定」変数を0にして隠すで自分を隠すよ。工場(親スプライト)は裏方に徹して、画面で戦うのはクローンだけっていう役割分担だね。
#7ウェーブの召喚ループ
準備
スプライト「司令官」を開く
変数「■現在の敵の種類」を追加
現在召喚中の敵の種類名(ゴブリン・オーク・ボス)
変数「■検索インデックス」を追加
TYPE_NAMEリストで敵の種類を検索したときのインデックス番号
変数「■現在のHP」を追加
現在召喚する敵のHP値
変数「■現在のスピード」を追加
現在召喚する敵の移動スピード値
メッセージ「召喚」を追加
敵を1体召喚するためのメッセージ
実装
( ) キーが押されたときでスペースキーを検知したら、( ) 回繰り返すで「■ウェーブ」リストの長さ分だけ繰り返すよ。ループの中では常に1番目のアイテムを取り出して「■現在の敵の種類」にセットし、( )中の( )の場所で「■敵の種類名」リストからインデックスを検索。そのインデックスで「■敵のHP」と「■敵のスピード」から対応する値を引っ張ってくるんだ。
データの準備ができたら「召喚」メッセージを送り、処理済みの1番目をリストから削除して1秒待つよ。削除すると次のアイテムが自動的に1番目に繰り上がるから、常に1番目を見るだけで全件処理できる仕組みなんだ。これが「先頭削除トリック」と呼ばれるキュー処理パターンだよ。
#8召喚メッセージの受信
準備
スプライト「敵」を開く
実装
( ) を受け取ったときで「召喚」を受信したら、まず「クローン判定」が1かどうかチェックするよ。もし1(=クローン)なら でスクリプトを止めて、親スプライト(工場)だけが( ) のクローンを作るを実行するんだ。
このガードがないとクローンもさらにクローンを作ってしまって、敵がねずみ算式に増殖しちゃうよ。
#9クローンの初期設定
クローンされたときで始まったら「クローン判定」を1にして、画面上部のランダムな位置(x:-100〜100、y:160)に出現させるよ。「■現在の敵の種類」の値でコスチュームを切り替えるから、ゴブリンならゴブリンの見た目、ボスならボスの見た目で登場する仕組みだね。
最背面に配置して表示したら、自分の種類名とHPを1秒間吹き出しで見せるよ。表示は「ゴブリンのHP:10」みたいな感じだよ。
#10敵の落下と消滅
ずっとループの中で、y座標を「■現在のスピード」×-5ずつ変化させて落下させるよ。ゴブリンはスピード3だから毎回-15ずつ、ボスはスピード1だから-5ずつ落ちる計算だね。y座標が-160より下になったら画面外に出たと判断して、このクローンを削除するでクローンを消すんだ。
0.05秒の待ち時間を入れることで落下のテンポを調整しているよ。この値を変えれば全体の難易度が変わるから、いろいろ調整してみよう。
まとめ
先頭削除トリックとペアリスト辞書の2つをマスターしたね!リストからアイテムを取り出して削除するだけで全件処理できるし、複数リストを並べるだけで辞書が作れる。この2つのテクニック、Scratchのいろんな場面で使えるから最強だよ。敵の種類を追加したり、ウェーブパターンを変えたりして、自分だけのタワーディフェンスに育てよう!