ファイブボックス 一分間スクラッチ講座 #001 重複なしのランダムなリストを作る方法
Youtube「一分間スクラッチ講座」でおなじみのファイブボックスです。
ここでは動画の内容を、読みやすい文章形式にまとめています。
今回は第一回目、リストを活用して「重複なしのリストを作成する方法」をまとめてみました。
はじめに
YouTubeショート「1分間スクラッチ講座」では、Scratchの便利なテクニックを短く紹介しています。
ただ、1分間ではどうしても
「なぜそうなるのか」
「どこに注意すればよいのか」
までは詳しく説明しきれません。
そこでnoteでは、動画で紹介した内容をもう少し丁寧に解説していきます。
今回のテーマは、
重複しないランダムなリストを作る方法
です。
たとえば、1〜10までの数字をランダムに並べたいけれど、同じ数字は2回出したくない、という場面で使えます。
リストとは?
Scratchのリストは、たくさんのデータをまとめて入れておける箱のようなものです。
変数は、基本的に1つの値を覚えておくときに使います。
たとえば、
スコア = 10のように、1つの数字を入れておくイメージです。
一方、リストは複数の値を順番に保存できます。
1: 7
2: 10
3: 5
4: 9
5: 3このように、たくさんの数字や文字をまとめて管理したいときに使います。

今回作るのは、1〜10までの数字をランダムに並べたものです。
つまり、10個の数字をまとめて扱いたいので、変数ではなくリストを使います。
完成イメージ
今回作るのは、次のようなリストです。

1〜10までの数字が、順番はバラバラですが、同じ数字は一度も出ていません。
つまり、順不同だけど、重複なし のリストです。
使う考え方
ポイントはとてもシンプルです。
ランダムに数字を選び、
その数字がまだリストに入っていなければ追加する。
すでにリストに入っている数字だった場合は、追加せずにもう一度選び直します。
つまり、考え方はこうです。
1. リストを空にする
2. リストの長さが10になるまで繰り返す
3. 1〜10の乱数を作る
4. その数字がリストに入っていないか確認する
5. 入っていなければリストに追加する
6. 10個そろったら終了
今回のプログラム
ブロックの流れ
Scratchでは、次のような流れになります。
緑の旗が押されたとき
スコアのすべてを削除する
スコアの長さ = 10 まで繰り返す
番号を 1 から 10 までの乱数 にする
もし スコア に 番号 が含まれる ではない なら
番号 を スコア に追加する
ここで大事なのは、「含まれるではない」という条件です。

この条件があることで、同じ数字が2回リストに入るのを防いでいます。
「リストの長さ」が大事
今回のプログラムでは、単純に10回繰り返しているわけではありません。
スコアの長さ = 10 まで繰り返す
としているのがポイントです。
なぜなら、重複した数字が出たときは、リストに追加されないからです。
たとえば、すでに「7」がリストに入っている状態で、もう一度「7」が出た場合、その数字は追加されません。
そのため、単純に10回だけ繰り返すと、リストの数が10個にならない可能性があります。
だから、リストの長さが10になるまで繰り返す という考え方にします。
なぜ重複しないのか
たとえば、乱数で「5」が出たとします。
このとき、リストの中にまだ「5」がなければ追加します。
スコアに5が含まれていない
→ 追加するでも、次にまた「5」が出た場合は、
スコアに5が含まれている
→ 追加しないとなります。

この判定を毎回行っているため、同じ数字が2回入ることはありません。
今回は1~10までの数字を使って試してみましたが、1~1000や、100~200などの番号でも同じことです。
ただし、あまり大きい数字にすると時間がかかるので注意してくださいね!
初心者が間違えやすいポイント
特に間違えやすいのは、次の部分です。
スコア に 番号 が含まれる ではないここを
スコア に 番号 が含まれるにしてしまうと、すでに入っている数字だけを追加するような意味になってしまいます。
今回やりたいのは、
まだ入っていない数字だけを追加する
ことなので、必ず ではない を使います。
活用できるシーン
この方法は、いろいろなゲームや教材で使えます。
たとえば、
・クイズの出題順をランダムにする
・カードをシャッフルする
・敵の出現順をランダムにする
・アイテムの出現場所を重複なしで決める
・ビンゴの数字を作るなどに応用できます。
特にクイズゲームでは、同じ問題が何度も出ないようにするために、とてもよく使う考え方です。
まとめ
今回は、Scratchで
重複しないランダムなリストを作る方法
を紹介しました。
ポイントは、
・リストを空にしてから始める
・乱数で数字を作る
・すでにリストに入っているか確認する
・入っていなければ追加する
・リストの長さが目標数になるまで繰り返すという流れです。
この考え方を使えるようになると、クイズ、カード、ビンゴ、ランダム出題など、いろいろな作品に応用できます。
YouTubeショートでは1分で紹介していますが、noteではこのように考え方まで含めて解説していきます。
ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。
いいなと思ったら応援しよう!
よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!