ページトップへ

子どものScratchで同じくじを二度引かないようにするには?リストで残りを管理する作り方

コラム

子どもがScratchで動物くじを作ったものの、「さっき出た動物が、また出てしまう」と困っていませんか。同じ項目を二度引かないくじにするには、残っている項目をリストに入れ、引いた項目をそのリストから削除する仕組みにします。

ここでは、緑の旗を押してからくじがなくなるまで、同じ動物が出ない作品を作ります。抽選の演出や得点は加えず、「選ぶ・結果を覚える・候補から外す」の順番に絞って組み立てましょう。

乱数だけでは「前に引いたもの」を除けない

たとえば、乱数で選んだ数字に動物を対応させるだけでは、前回と同じ数字も再び候補になります。「ばらばらに選ぶこと」と「一度出たものを除くこと」は、別の処理です。

Scratchの乱数ブロックは、指定した範囲から数を選びます。過去に出た数を自動で取り除くブロックではありません。基本の働きは、Scratch公式の乱数ブロック解説で確認できます。

紙のくじなら、引いた紙を箱に戻さなければ同じ紙は出ません。今回の作品でも、リストを箱に見立て、取り出した項目を戻さない形にします。

作りたいくじ 引いた後の扱い
同じ結果が何度出てもよい 候補を残したまま、次も選ぶ
全部引くまでは同じ結果を出さない 選んだ項目を候補から削除する

この記事で作るのは後者です。おみくじのように結果が繰り返されてもよい作品なら、削除する処理は必要ありません。

用意するのは「残りのくじ」と二つの変数

作例では、ねこ・いぬ・うさぎ・くまを一つずつ入れます。動物の種類や個数は、この手順を説明するための例です。子どもの好きな乗り物や食べ物に置き換えて構いません。

くじを引くときにクリックするスプライトを一つ選び、「変数」カテゴリーから、次のリストと変数を作ります。今回はすべて「すべてのスプライト用」でそろえます。

  • リスト「残りのくじ」:まだ引かれていない動物を入れる。
  • 変数「引いた番号」:今回選んだ、リスト内の位置を覚える。
  • 変数「結果」:取り出した動物の名前を覚える。

変数は一つの値を、リストは順番のある複数の項目を保持できます。仕組みの確認には、Scratch Foundationの「Variables and Lists」(英語PDF)も利用できます。

制作中は「残りのくじ」をステージに表示しておくと、クリックするたびに何が消えたかを確かめられます。完成時に見せたくなければ、確認が済んでから非表示にしましょう。

緑の旗で、くじの中身を入れ直す

選んだスプライトに、次の順番でブロックをつなぎます。以下の枠内は、ブロックの組み方を文字で表したものです。テキストを貼り付けて実行するコードではありません。

緑の旗が押されたとき
「残りのくじ」のすべてを削除する
「残りのくじ」に「ねこ」を追加する
「残りのくじ」に「いぬ」を追加する
「残りのくじ」に「うさぎ」を追加する
「残りのくじ」に「くま」を追加する
「引いた番号」を 0 にする
「結果」を空欄にする
「くじをクリックしてね」と言う

先頭で中身を空にするのは、旗を押すたびに動物が追加され、同じ名前が複数入るのを防ぐためです。この作品では、緑の旗を押すことを、新しい一組のくじを用意する合図にします。

クリックしたら「番号を決める→覚える→削除する」

同じスプライトに、もう一つ、クリックされたときの処理を作ります。「もし〜なら、でなければ」の中へ、それぞれのブロックを入れてください。

このスプライトが押されたとき
もし「残りのくじ」の長さ > 0 なら
  「引いた番号」を
    1 から「残りのくじ」の長さまでの乱数にする
  「結果」を
    「残りのくじ」の「引いた番号」番目にする
  「残りのくじ」の「引いた番号」番目を削除する
  「結果」と言う
でなければ
  「くじは全部引きました」と言う

「結果と言う」では、文字の「結果」を入力するのではなく、丸い変数ブロック「結果」を差し込みます。また、この作例では待ち時間を入れず、選んだ項目を削除してから結果を表示します。

乱数の上限は、最初の個数に固定しない

候補が減った後も最初と同じ範囲で番号を選ぶと、存在しない位置を選ぶことがあります。そこで、上限には「残りのくじの長さ」を入れます。このブロックが返すのは、現在リストに入っている項目の個数です。詳しくは、Scratch公式のリストの長さの解説を参照してください。

名前を変数に移してから、元の項目を消す

「リストの何番目」というブロックは、その位置の項目を取り出せます。今回は、その値を変数「結果」に移しておきます。ブロックの働きは、Scratch公式の項目を取り出すブロック解説に示されています。

削除した後に同じ番号の項目を読むと、そこには別の動物が移っている場合があります。「結果を覚える」が先、「削除する」が後。この順番は入れ替えないでください。

記事の途中で1分・5問

お子さまに合う学び方診断

正解・不正解を決める診断ではありません。今の様子から、取り組みやすい学び方の入口をご案内します。

動物の名前と、リストの番号を分けて確かめる

ここが混乱しやすいところです。「引いた番号」は動物固有の番号ではなく、その時点での並び順を表します。次は、動きを説明するために、選ばれた番号を仮定した例です。

場面 処理前の並び 選んだ番号と結果 削除後の並び
最初の抽選 ねこ・いぬ・うさぎ・くま 2番目=いぬ ねこ・うさぎ・くま
次の抽選 ねこ・うさぎ・くま 2番目=うさぎ ねこ・くま

同じ「2番目」を選んでも、取り出す動物は変わります。項目の削除でリストの長さが減ることは、Scratch公式の削除ブロック解説でも確認できます。

動作を試すときは、当たり方の印象ではなく、次の条件を見ます。

  1. 旗を押した直後、動物が一つずつ入っている。
  2. クリックすると、表示された動物がリストから消える。
  3. 最後の項目を引いた後は、クリックしても新しい抽選をしない。
  4. もう一度旗を押すと、最初の動物が一つずつ戻る。

実際に出る順番は、ここに載せた表と同じでなくて構いません。「表示した動物が候補から外れたか」が、この作品の確認点です。

同じ結果が出るときに見る、三つの場所

候補の中に、同じ名前が二つ入っていないか

「ねこ」が二つあれば、一つを削除しても、もう一つは残ります。動物名そのものを重複させたくない場合は、最初に追加する名前を一つずつにしてください。

選ぶときと消すときに、別々の乱数を使っていないか

結果を選ぶための乱数と、削除するための乱数を別々に入れると、表示した動物とは違う項目を消すことがあります。乱数を作るのは一度だけ。その番号を変数「引いた番号」に保存し、読み取りと削除の両方に使います。

クリックのたびに、候補を補充していないか

動物を追加するブロックは、旗を押したときの処理に置きます。クリック側にも追加処理があると、引いた動物をすぐ候補へ戻してしまいます。

ブロックを見直すときは、まず「補充は旗」「取り出しはクリック」と役割を分けて確認しましょう。今回の作例では、空になっても自動補充せず、終了したことが分かる表示にしています。

よくある質問(FAQ)

直前と同じ動物が出なければ十分ではありませんか?

直前の結果だけを避ける方式では、間に別の動物が出れば、以前の動物がまた出る可能性があります。「全部引くまで再登場させない」なら、今回のように引いた項目を候補から外します。

くじを全部引くと、最後の結果が消えてしまいますか?

この作例では、取り出した名前を変数「結果」に移しているため、リストが空でも最後の結果は変数に残ります。その後にもう一度クリックすると、吹き出しは終了の案内に変わります。

「当たり」を複数入れるくじにも使えますか?

使えます。ただし「当たり」という同じ表示は複数回出ます。この仕組みが防ぐのは、取り出した項目を再び引くことです。同じ表示内容まで一度きりにしたい場合は、候補自体を重複させないでください。

幼児と一緒に試すなら、何を任せればよいですか?

ブロックの組み立てが難しければ、入れる動物を選ぶ役や、画面に出た動物の紙カードを箱から取り出す役で参加できます。画面のリストと紙の箱を対応させる、この作品に限った試し方です。操作や文字の読み取りを無理に任せる必要はありません。

緑の旗を押した後も、前回引いた動物を除けますか?

この記事の作例では除けません。旗を押すと候補をすべて入れ直す設計だからです。まずは「一組を引き切るまで重複しない」範囲で完成させ、前回の状態を残す機能は分けて考えましょう。

「くじを作りたいけれど、リストの仕組みから教わりたい」という場合は、作りたい動物や、今できている部分を体験申し込み時に伝える方法もあります。CotoMiraiは南青山で、一人ひとりの年齢・興味・理解度に合わせた個別指導を行っています。指導方針はCotoMirai公式サイトで確認できます。

無料体験は年中以上のお子さま向けに案内されています。このくじ制作を体験で扱えるかは未確認のため、希望する場合は事前にお問い合わせください。

CotoMiraiの無料体験・入会方法を見る

参考にした情報

関連する記事

読後に1分・5問

お子さまに合う学び方診断

正解・不正解を決める診断ではありません。今の様子から、取り組みやすい学び方の入口をご案内します。

お知らせ一覧へ

アクセス

A C C E S S