スクラッチ 乱数 重複しない方法|なぜ同じ数字が出る?どう防ぐ?Scratch質問編(FAQ)

Scratch質問編(FAQシリーズ)

Scratchで乱数を使ってクイズやゲームを作ると、 「同じ数字が連続で出る」「重複してしまう」「ランダムにならない」 といった悩みを必ず経験します。

とくに初心者ほど、 「乱数ってランダムじゃないの?」 「どうして同じ数字が出るの?」 と混乱しがち。

この記事では、Scratchで乱数が重複する理由と、 重複しないランダム処理を作る正しい方法 をFAQ形式でわかりやすく解説します。

結論:乱数が重複するのは正常であり、重複しない仕組みを自分で作る必要がある

Scratchの乱数は「完全ランダム」なので、 同じ数字が連続して出るのは正常な動作 です。

そのため、 「重複しない乱数を使いたい」 「毎回違う順番で出題したい」 という場合は、次の仕組みを自分で作る必要があります。

重複しないランダム処理の本質(3つ)

  • ① 重複チェックを入れる  選んだ数字がリストに存在しないときだけ追加する。
  • ② 必要な数がそろうまで繰り返す  10個必要なら「10個そろうまで繰り返す」。
  • ③ 番号対応を崩さない  問題文リスト・正解リスト・出題順リストを同じ番号で扱う。

この3つを満たすと、 乱数が重複しない“正しいランダム処理” が完成します。

なぜ乱数は重複するのか?

Scratchの乱数は「完全ランダム」です。

つまり、次のような動作が普通に起こります。

  • 3 → 3 → 3 → 7 → 3
  • 5 → 1 → 1 → 1 → 9
  • 10 → 10 → 2 → 10 → 8

これは「乱数が壊れている」のではなく、 ランダムだからこそ起きる自然な現象 です。

そのため、 「重複しない乱数を使いたい」 「毎回違う順番で出題したい」 という場合は、乱数そのものではなく、

👉 “重複しない仕組み”を自分で作る必要がある

ということになります。

乱数の「重複あり版」と「重複なし版」の違いを解説

Scratchで乱数を使うとき、 「重複ありのランダム抽選」「重複なしのシャッフル」 はまったく別の仕組みです。

ここでは、画像のコードを使って 2つの違いをわかりやすく比較 します。

① 重複あり版:乱数をそのまま使う方式

ここからは、実際のコード例を使って「重複あり」と「重複なし」の違いを具体的に見ていきます。

まずは、もっともシンプルな“乱数をそのまま使う方式(重複あり)”から確認しましょう。

▼ クイズゲーム(重複あり)
👉 Scratch共有ページを開く

Scratchで乱数を使って問題番号を選び、重複ありで出題する処理の例
乱数をそのまま使うため、同じ問題番号が何度も出る「重複あり」のランダム抽選になります。

このコードは、スプライトを押すたびに 1〜10の乱数をそのまま使う方式 です。

処理の流れ

  • スプライトが押される
  • 問題番号を「1〜10の乱数」にする
  • その番号の問題文を表示
  • 出題履歴に追加
  • 次の問題へ進む

結果:重複するのが正常

乱数は完全ランダムなので、

  • 3 → 3 → 7 → 3
  • 10 → 10 → 2 → 10

のように 同じ数字が連続で出るのは正常な挙動

この方式は「シャッフル」ではない

  • 重複する
  • 同じ問題が何度も出る
  • 出題順はバラバラ

つまりこれは ランダム抽選 であり、 重複なしのシャッフルではない

② 重複なし版:重複チェックしながらリストを作る方式

次に、乱数を使いながらも「重複しないランダム順」を作る方法を見ていきます。

こちらはクイズやカードゲームで必須となる“重複なしシャッフル”の仕組みです。

▼ クイズゲーム(重複なし)
👉 Scratch共有ページを開く

Scratchで重複チェックを行い、出題履歴リストを重複なしで作る処理の例
乱数で選んだ番号が未使用のときだけリストに追加し、10個そろうまで繰り返す「重複なしシャッフル」の仕組みです。

処理の流れ

  • 出題履歴の長さが10になるまで繰り返す
  • 問題番号を「1〜10の乱数」にする
  • 出題履歴にその番号が存在するかチェック
  • 存在しなければ追加
  • 10個そろったら終了

結果:重複なしのランダム順が完成

  • 同じ番号は絶対に入らない
  • 10個すべてユニーク
  • 毎回違う並び順が作られる

シャッフルと同じ効果

Scratchにはシャッフルブロックがないため、 この「重複チェック+追加」の方式が シャッフルの本質 になる。

③ 2つの違いをまとめるとこうなる

種類重複仕組み用途
重複あり版(乱数抽選)あり乱数をそのまま使うガチャ・ランダムイベント
重複なし版(シャッフル)なし重複チェックしながらリストを作るクイズ・カードゲーム

まとめ:スクラッチで乱数を重複させないために必要なのは“仕組みづくり”

Scratchの乱数は「完全ランダム」なので、 同じ数字が連続して出るのは正常な動作 です。

そのため、 「重複しない乱数を使いたい」 「毎回違う順番で出題したい」 という場合は、乱数そのものではなく、

👉 重複しない仕組みを自分で作る必要があります。

重複しないランダム処理の本質(3つ)

  • ① 重複チェックを入れる  選んだ数字がリストに存在しないときだけ追加する。
  • ② 必要な数がそろうまで繰り返す  10個必要なら「10個そろうまで繰り返す」。
  • ③ 番号対応を崩さない  問題文リスト・正解リスト・出題順リストを同じ番号で扱う。

この3つを満たすと、 重複なしのランダム順(シャッフル) が完成します。

乱数の「重複あり」と「重複なし」は別物

  • 重複あり版(乱数抽選)  乱数をそのまま使うため、同じ数字が何度も出る。  → ガチャ・ランダムイベント向け。
  • 重複なし版(シャッフル)  重複チェックしながらリストを作る。 → クイズ・カードゲーム向け。

Scratchにはシャッフルブロックがないため、 重複チェック+追加の仕組みこそがシャッフルの本質 になります。

この記事で学べること(要点)

  • 乱数が重複する理由
  • 重複しないランダム処理の作り方
  • シャッフルの3つの考え方
  • 重複あり版と重複なし版の違い
  • クイズやゲームでの応用方法

Scratch初心者が必ずつまずく「乱数の重複問題」を、 仕組みの理解とコード例で完全に解決できる内容になっています。

さらに学びたい方は、完成版のゲームから逆回転して学べる Scratch逆回転講座INDEX をご覧ください。
作りたいゲームから逆算して学べるので、次に何を学べばよいかが一目でわかります。

ご質問があれば、この記事のコメント欄へお気軽にどうぞ。
Scratch や micro:bit の疑問には、この記事のように動画や実際のプログラムを示しながら、わかりやすく回答していきます。
学習のつまずきや「ここがわからない!」というポイントがあれば、ぜひ書き込んでください。

コメント