ドットインストール - 3分動画でマスターできるプログラミング学習サービス

  • レッスン一覧
  • 料金プラン
    • レッスン一覧
    • 料金プラン
  • ログイン
  • 運営からのお知らせ

    • 2025/07/17 NEW

      【週刊ドットインストール】 256timesでLevel 2-2のクラスが開講、問題集の追加、レッスン制作の進捗

    • 2025/07/16 NEW

      フレックスボックスの実践的な実装を学べる『手を動かして学ぶ模写コーディング Level 2-1』を開講します

    すべて見る
  • トップ /
  • マイページ /
  • main.js

main.js

//javaScriptで数字タッチゲームを作成する
//class構文で処理をひとまとまりにして管理する
//classはBoardクラスとPanelクラスを作成して処理を分けて考える※チーム開発する上で役割を決めておく
//Boardクラスは4つ持ったボードを表している
//Panelクラスはパネルがどのように配置するか担っている。Panelクラスはパネルの内に責任をもつ


class Panel {
  //インスタンスした際の初期化処理
  constructor(game) {
    this.game = game;
    //li要素を生成
    this.el = document.createElement('li'); //プロパティをthis.el
    this.el.classList.add('pressed') //pressedクラスを付与
    this.el.addEventListener('click',() => {
      this.check();
    })
  }
  getEl() {
    return this.el
  }

  //パネルクラスを外してパネルにランダムで数字を入れる
  activate(num) {
    this.el.classList.remove('pressed');
    this.el.textContent = num
  }

  //panelボタンを押す際に0から押すようにif分で条件分岐する
  check() {
    if(currentNum === parseInt(this.el.textContent, 10)) {
      this.el.classList.add('pressed')
      currentNum++
    }

    if(currentNum  === 4) { //currentNumが総パネル数と同じになったらタイマーを止める
      clearTimeout(timeoutId)
    }
  }
}



class Board {
  //インスタンスの初期化設定
  constructor(game) {
    this.game = game
    //各パネルを配列に格納するための空の配列を作成
    this.panels = [];
    //空の配列にパネルを格納するためにfor分でループを回す
    for(let i = 0; i< 4; i++) {
      this.panels.push(new Panel(this.game)) //Panelクラスでパネルを用意する
    }
    this.setup()
  }
 setup() {
  const board = document.getElementById('board');
  this.panels.forEach(panel => {
    board.appendChild(panel.getEl())
  })
 }

 //btnをクリックした際にboardの中のパネルのメソッドを呼び出す
 activate() {
  const nums = [0,1,2,3]; //パネルにつける番号を配列で保持
  
  this.panels.forEach(panel => {
     const num = nums.splice(Math.floor(Math.random() * nums.length),1)[0];
     panel.activate(num);
   })
 }

}


// const panel = new Panel();



class Game {
  constructor() {
    this.board = new Board(this);
    //ボタンのクリック時に今、どのボタンが押されているかを管理するための変数
    this.currentNum = undefined
    
    //タイマー処理を実装
    this.startTime = undefined
    
    //タイマーを止める変数
    this.timeoutId = undefined
    
    
    //ボタンクリック操作でパネルを押す処理
    //ボタン要素を取得
    const btn = document.getElementById('btn');
    btn.addEventListener('click', () => {
     this.startClick()
    })
  }
  startClick() {
    this.board.activate();
    
    this.currentNum = 0;
    if(typeof this.timeoutId !== 'undefined') {
       clearTimeout(this.timeoutId)
    }
    this.startTime = Date.now()
    this.runTimer()
  }

  runTimer() {
    const timer = document.getElementById('timer')
    this.elapsedTime = ((Date.now() - this.startTime) / 1000).toFixed(2);
    timer.textContent =this.elapsedTime;

    this.timeoutId = setTimeout(() => {
      this.runTimer()
    },10)
  }
}

new Game()



dotinstall

3分動画でマスターできるプログラミング学習サービスです。あなたもプログラミングを始めてみませんか?

サービスメニュー

  • レッスン一覧
  • 料金プラン
  • 法人向けライセンス
  • 運営からのお知らせ
  • プログラミング学習ガイド
  • プログラミング学習相談室
  • ヘルプ

ご利用にあたって

  • 利用規約
  • プライバシーポリシー
  • 利用者情報の外部送信について
  • 運営企業情報
  • 採用情報
  • 教材利用について
  • お問い合わせ

プログラミング勉強会

  • 256times

ソーシャルメディア

  • note
  • X (@dotinstall)
  • Facebookページ

更新情報

  • 新着レッスンRSS
  • 新着補足情報RSS

Copyright © 2011-2025 dotinstall.com. All Rights Reserved.