数字が盤面にランダムで表示され、出てきた数字と同じ数字のパネルを押すというゲームを作りました。動作自体は問題ないのですが、重複しないで数字を出せるかどうかのところで試行錯誤した結果、コードがスッキリしていないような気がします。やはりクラスなどをもっと駆使したほうがいいのでしょうか?何かアドバイスがあればお願いします。
'use strict'; { ///パネルを作る処理 class Panel { constructor() { this.el = document.createElement('li'); this.el.classList.add('pressed'); this.el.addEventListener('click', () => { this.check(); score.textContent = scoreNum; }); }; getEl() { return this.el; } activate(num) { this.el.classList.remove('pressed'); this.el.textContent = num; } check() { if(parseInt(this.el.textContent) === answerNum) { this.el.classList.add('pressed'); scoreNum++; currentNum++; randomAsk(); } else { scoreNum--; } } } ///盤面全体の処理 class Board { constructor() { this.panels = []; for (let i = 0; i < 16; i++){ this.panels.push(new Panel()) } this.setup(); } setup() { const board = document.getElementById('board'); this.panels.forEach(panel => { board.appendChild(panel.getEl()); }); } activate() { this.panels.forEach(panel => { const ranNum = numArray.splice(Math.floor(Math.random() * numArray.length), 1)[0]; panel.activate(ranNum); }); } } ///カウントダウンの処理 function countD() { let sec = 300; let id = setInterval(() => { const timer = document.getElementById('timer'); if (sec <= 0) { clearTimeout(id); alert('GAMEOVER'); } timer.textContent = sec; sec--; console.log(sec); }, 1000); } const board = new Board(); ///数字をランダムで出す。プレイヤーはその数字を押すと得点。数字は重複しないようにする。 let currentNum = 0; let startTime; let isPlaying = false; let score = document.getElementById('score'); let scoreNum = 0; const numArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]; const answerArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]; let answer = document.getElementById('answer'); let answerNum = 0; const start = document.getElementById('start'); start.addEventListener('click', () => { if (isPlaying) { return; } randomAsk(); isPlaying = true; board.activate(); countD(); }); ///数字は重複しないようにさせる関数 function randomAsk() { answerNum = answerArray.splice(Math.floor(Math.random() * answerArray.length), 1)[0]; answer.textContent = answerNum; } startTime = Date.now(); }