▲TOPへ戻る

【javascript】ビンゴゲームで使える、重複なしでランダムに数字を表示させる方法

random shuffle

やりたいこと

以下のように、数字をランダム表示させ、一度現れた数字は、配列から削除し、 2度表示させないようにする方法を紹介します。

1

配列を生成し、ランダムにする

1行目 : 配列を宣言しておく

4行目 : ここでは0~100までをfor文 でループさせて配列を作ります。100の部分を1000にすることも可

8行目 : 配列の中身をシャッフルし、ランダムにする。

let numberArr = [];
let randomNumberArr = [],

for (let i = 0; i <= 100; i++) {
  numberArr.push(i);
}

randomNumberArr = shuffle(numberArr);

function shuffle(arrays) {
  const array = arrays.slice();
  for (let i = array.length - 1; i >= 0; i--) {
    const randomIndex = Math.floor(Math.random() * (i + 1));
    [array[i], array[randomIndex]] = [array[randomIndex], array[i]];
  }
  return array;
}

数字をランダムに表示させる

const number = document.querySelector(".number"); // 数字を表示させる要素
const btn = document.querySelector("button"); // ボタン
let timerId;  // setIntervalを止めるための変数

btn.addEventListener("click", () => {
  if (btn.textContent == "Start") { // ボタンの表示が「Start」の場合
    timerId = setInterval(function () {
      let index = Math.floor(Math.random()*numberArr.length);
      text.textContent = numberArr[index];
    }, 25);
    btn.textContent = "Stop";
  } else {  // ボタンの表示が「Start」ではない場合
    text.textContent = randomNumberArr[0];  // 配列の1番目を表示させる
    btn.textContent = "Start";
    clearInterval(timerId);  // setIntervalを止める
    randomNumberArr.shift();  // 配列の1番目を削除 
    if(randomNumberArr.length == 0){  // 配列の中がすべて削除されたら終了 
      btn.textContent = "終了";
      btn.setAttribute("disabled", "true")  // クリックを無効にする 
    }
  }
});

参考

js
【javascript】setIntervalと、それを停止させるclearIntervalの使い方
js
【javascript】シャッフルする関数を作り、配列の中身をシャッフルさせる方法
js
【javascript】配列の中身を追加(push, unshift)、削除(pop, shift)する方法

まとめ

  1. for文で配列を生成する
  2. シャッフルする関数を作り、配列の中身を入れ替える
  3. 配列の1番目を表示し、表示されたものを配列から削除する

こんな記事も読まれています。

profile

パソコン好きなガオ

コロナ禍によるステイホームを機にプログラミングを学ぶ。パソコンに関してはプロではないが、ちょっと詳しい程度。

パソコン

javascript

カメラ

ブログ