・リストの作り方、使い方
・リストを使ったゲーム作り(その1) など。
今回のチャプターからは<応用編>を進めていきます。
さっそく、まずはリストについて学んでいきましょう。
○リストってなに?
「リスト」というのは、簡単に言うと、番号(順番)の付いた変数の集まりのようなもの、と思っていただけると良いと思います。
変数は、ひとつの箱を用意して、そこに一つの数値や文字列を入れておくことしかできませんでした。
リストなら、いくつもの箱を並べておいて、
そこに複数の数値や文字列を順番に入れておくことができる、
というわけです。
下の図を見てください。
これは、「フルーツ」という名前のリストを作り、4番目までフルーツの名前(文字列)を入れたイメージ図になります。
リスト「フルーツ」の1番目 : りんご
リスト「フルーツ」の2番目 : バナナ
リスト「フルーツ」の3番目 : オレンジ
リスト「フルーツ」の4番目 : スイカ
という感じですね。
まずは、練習として、スクラッチ上でこのリストを作ってみましょう!
下部の、リストを使ったゲーム作りの項目に進んでください。
○リストの作り方
リストを作るには、「変数」欄にある「リストを作る」をクリックします。
すると、新しいリストを作る入力フォームが出るので、
新しいリスト名に「フルーツ」と入力して、OKをクリックしましょう。
すると、上の図のように、コード欄にリストに関するブロックが追加され、
ゲーム画面上には新しく作った「フルーツ」というリストが表示されています。
まだ、中身は(空)となっていますね。
項目を追加するには、枠の左下の「+」のマークをクリックしましょう。
すると、1番目の項目が追加され、入力ができるようになるので、
「りんご」と入力してみましょう。
りんごの入力ができたら、ふたたび「+」のボタンで項目を追加していき、
「バナナ」、「オレンジ」、「スイカ」を入力しましょう。
これで、先ほどイラストで紹介した、フルーツのリストが完成しました!
下部に書いてある「長さ4」というのは、リストの中の項目が4つありますよ、と言う意味です。
また、リストの項目は、以下の「なにかをリストに追加する」や「リストの1番目になにかを挿入する」ブロックを使っても追加できます。
フルーツの例で言うと、「なにか」の部分に、「りんご」、や、「バナナ」を入力して使うことになります。
今回のゲームでは、この「なにかをリストに追加する」ブロックを使っていきましょう!
なお、作る前に、一度この練習用のフルーツのリストは削除します。
削除の仕方は、リスト名の上で右クリックから行うことができます。
フルーツの削除が完了したら、さっそく作っていきましょう!
○リストを使ったゲーム作り
まずは、背景とスプライトから設定していきます。
背景は、「Jurassic」、
スプライトは「Dinosaur1」「Dinosaur2」「Dinosaur3」「Dinosaur4」を追加しましょう。
【背景】
【スプライト】
スプライトが少し大きいので、大きさはそれぞれ90に設定します。
Dinosaur1から4のスプライト名は、それぞれ、
「ブラキオサウルス」「トリケラトプス」「プテラノドン」「ティラノサウルス」にしました。
ねこのスプライトは削除しておきましょう。
スプライトの設定が終わったら、新しく、「見つけた恐竜」というリスト名のリストを作ります。
追加後、背景とそれぞれのスプライト、リスト「見つけた恐竜」が表示されていれば準備完了です。
次は、スプライト(ブラキオサウルス)のスクリプトを作っていきましょう。
○恐竜たちのスクリプト
今回のゲームでは、旗が押されたときに恐竜たちはランダムな位置に隠れます。
そこで、まず「旗が押されたとき」に「隠す」ようにして、
乱数を使って恐竜のX座標とY座標の範囲を指定します。
ここでは、X座標とY座標のブロックを分けていますが、
これは単にわかりやすくするためだけの理由なので、
「X座標を~に、Y座標を~にする」のブロックを使っても大丈夫です。
また、完全に画面上のランダムな位置でも良い場合は、「どこかの場所へ行く」というブロックも使えます。
この「どこかの場所」というのは、画面全体、つまり、
X座標:-240から240の範囲
Y座標:-160から160の範囲
ということです。
ただ、今回は、このブロックを使うと、
画面外やリストの裏に恐竜のスプライトの多くの部分がはみ出て隠れてしまうことがあるので、
このブロックは使わずに、
X座標を-110から150、Y座標を-120から120の範囲の乱数にしています。
乱数まで設定できたら、次はスプライト(ブラキオサウルス)をクリックしたときのプログラムを作っていきましょう!
隠れた恐竜を見つけた時のスクリプトです。
○隠れた非表示のスプライトのクリック
通常、スプライトをクリックしたときのスクリプトは、
「このスプライトが押されたとき」のブロックを使うことが多いですが、
「隠す」ブロックなどで隠れたスプライトをクリックしても、このブロックは反応しません。
そこで、
<応用編>5-1 隠れた非表示のスプライトをクリックして表示する方法で紹介している、
隠れた非表示のスプライトでもマウスをクリックしたときに一度だけ反応する、以下のスクリプトを使います。
この中に、実行したいブロックを追加していきましょう!
まず、クリックが成功したら、
①クリックした恐竜(ブラキオサウルス)を最前面へ表示させ、
②リスト「見つけた恐竜」にブラキオサウルスを追加させるようにします。
そして、
恐竜を見つけた後に再度このスクリプトが作動して、リストに同じ恐竜が追加されたりしないように、
③の「このスクリプトを止める」を入れておくのを忘れないようにしましょう。
ブラキオサウルスのスクリプトはこれで完成です!
他の恐竜たちも、違いはリストに追加する恐竜の名前だけなので、
このスクリプトをコピーして作っていきましょう。
○スクリプトの複製(コピー)
前回<入門編>3-4 フルーツをキャッチするゲームを作ろう!では、
りんごのスプライト自体を複製して他のバナナやボールのスプライトを作っていきましたが、
今回は、スクリプトをドラッグ&ドロップして、他の恐竜にも複製(コピー)していきます。
やり方は、
「旗が押されたとき」についているブロックのかたまりをまるごとドラッグして、
別のスプライト(=トリケラトプス)の上に、まとめてドロップします。
すると、別のスプライト(トリケラトプス)に、ブラキオサウルスのスクリプトが複製されます。
リスト「見つけた恐竜」に追加する名前は、
スプライトと同じ恐竜の名前(=トリケラトプス)に書き換えましょう。
これで、トリケラトプスへのスクリプトの複製は完了です。

残りの、プテラノドンとティラノサウルスも、同じようにスクリプトを複製して、
リストに追加する恐竜の名前をそれぞれ書き換えてください。
すべての恐竜への設定が完成したら、一度プログラムを実行してみましょう!
それぞれの隠れた恐竜をクリックしたときに姿が現れて、リストに名前が追加されていれば、
恐竜のスクリプトは完成です。
なお、下の図のように、画面内に表示されているリストの枠の大きさを調整すると、恐竜の名前が見切れないで済みます。
リストの左下の「=」が書いてあるあたりにカーソルをあわせると、「⇔」(両矢印)のマークが出るので、サイズが調整できます。
また、このままだと、ゲーム開始時にリストに恐竜が残ったままになってしまうので、
今回は、時間のカウントやゲームクリアのプログラムなどと一緒に、
背景にスクリプトを設定していきます。
○時間のカウントとゲームクリア
スクラッチでは、他のスプライトと同じように、
背景にもスクリプトを設定していくことができます。
方法も、他のスプライトへのブロックの配置と同じです。
右下の「ステージ」から背景を選択し、真ん中の欄にブロックを配置していきます。
(ただし、背景には「動き」ブロックは使うことができません。)
最初に、
旗が押されたときのリストの初期化(空っぽの状態にする)とゲームクリアから作っていきましょう!
まず、リストの中身をすべて削除するには、「~のすべてを削除する」ブロックを使います。
そして、ゲームクリアは4匹の恐竜を見つけたときです。
このときに、見つけた恐竜リストの長さ(項目の数)は4になっているはずなので、
「リストの長さ」のブロックを使って、
ゲームクリアの条件を以下のようにプログラムすることができます。
ここで、ゲームクリア時には、背景を切り替えることでクリアの演出をしておきましょう。
今回は、「Rays」の背景を使用しています。
元の背景への初期化(=Jurassicにする)のブロックも忘れずに追加しましょう。
これで、初期化とゲームクリアのスクリプトは完成です!
そして最後に、時間のカウントのスクリプトを背景に追加します。
今回は、<入門編>3-3 タイマーとストップウォッチを作ろう!(時間制限)で紹介した、
「タイマー」と変数を使ったシンプルな形です。
「時間」という名前の変数を新しく作って、常にタイマーと同じ値になるようにします。
ゲームクリアしたときの「すべてを止める」処理によって、
タイマーのカウントは止まりませんが、「時間をタイマーにする」処理が止まります。
そのため、
時間のカウントがそこでストップするので、クリアタイムがちゃんとわかるようになっています。
あとはゲーム画面内の「時間」と「見つけた恐竜」の枠が重ならないように、
うまくドラッグ&ドロップで整えれば、プロジェクトは完成です!
今回のチャプターでは、リストについての説明と、
主にリストの追加と削除の機能を使ったゲームの内容にしました。
無事、すべての恐竜を見つけて、ゲームクリアまで動きましたでしょうか?
次回のチャプターでは、リストの使い方をもう少し応用した内容のゲーム作りをしていきます!
今回もありがとうございました。