前提・実現したいこと
javascriptでもぐらたたきゲームを作っています。
獲得点数に応じて画面を表示したいです。
もぐらをクリックした数だけ点数を加算する関数の結果を、点数に応じて条件分岐しているところにreturnしたいです。
発生している問題・エラーメッセージ
getScore()を変数scoreに代入しているのですが、scoreをconsole.logで確認するとundifindと表示されます。
getScoreはreturnで結果を返すように記載しています。
該当のソースコード
javascript
1 class Panel{ 2 constructor() { 3 const section = document.createElement('div'); 4 section.classList.add('mole__item'); 5 6 this.img = document.createElement('img'); 7 this.img.src = this.getRandomImage(); 8 section.appendChild(this.img); 9 const container = document.getElementById('container'); 10 container.appendChild(section); 11 12 13 } 14 15 16 17 getRandomImage() { 18 const images = [ 19 'img/cat.png', 20 'img/mole-work.png', 21 'img/dog.png', 22 ]; 23 24 25 return images[Math.floor(Math.random() * images.length)]; 26 27 } 28 29 30 31 spin() { 32 let timer = document.getElementById('timer'); 33 this.img.src = this.getRandomImage(); 34 if(this.img.src === 'http://127.0.0.1:5502/img/mole-work.png') { 35 this.img.classList.add('mole'); 36 37 }else if(this.img.src !== 'http://127.0.0.1:5502/img/mole-work.png') { 38 this.img.classList.remove('mole'); 39 } 40 41 this.timeoutId = setTimeout(() => { 42 this.spin(); 43 if(timer.classList.contains('stop')) { 44 clearTimeout(this.timeoutId); 45 } 46 }, 800); 47 } 48 49 50 } 51 52 53 54 const panels = [ 55 new Panel(), 56 new Panel(), 57 new Panel(), 58 new Panel(), 59 new Panel(), 60 new Panel(), 61 new Panel(), 62 new Panel(), 63 new Panel(), 64 ]; 65 66 const btn = document.getElementById('btn__start'); 67 let success = document.getElementById('success'); 68 let good = document.getElementById('good'); 69 let cheer = document.getElementById('cheer'); 70 function score(callback) { 71 callback(); 72 } 73 74 75 btn.addEventListener('click',() => { 76 btn.classList.add('start'); 77 timer(); 78 panels.forEach(panel => { 79 panel.spin(); 80 }) 81 if(btn.classList.contains('start') === true) { 82 83 function getScore() { 84 const imgs = document.querySelectorAll('img'); 85 for(let i =0; i < imgs.length; i++ ) { 86 imgs[i].addEventListener('click', () => { 87 if(imgs[i].classList.contains('mole') === true) { 88 point++; 89 console.log(point); 90 } 91 }); 92 } 93 }; 94 const totallScore = score(getScore);// 95 let timer = document.getElementById('timer'); 96 if(timer.textContent === '0 秒') {//タイマーが0秒になった時に点数に応じて条件分岐する 97 if(totallScore >= 7) { 98 success.style.display ='block'; 99 success.classList.add('block'); 100 }else if(totallScore >= 5) { 101 good.style.display ='block'; 102 good.classList.add('block'); 103 }else{ 104 cheer.style.display = 'block'; 105 cheer.classList.add('block'); 106 } 107 } 108 } 109 });
HTML
1<h1>もぐらたたき!!</h1> 2 <div class="btn__container"> 3 <div id="btn__start" class="btn btn__start">Start</div> 4 </div> 5 6 <div id="container"> 7 8 <div id="timer">60 秒</div> 9 10 <div id="success" class="score"> 11 <div class="score__container score__success"> 12 <div class="score__title">すごい!!</div> 13 <div class="score__score">40<span>点</span></div><!-- 点数は仮です --> 14 <div id="btn__reset" class="btn btn__continue">Continue!!</div> 15 </div> 16 </div> 17 <div id="good" class="score"> 18 <class class="score__container score__success"> 19 <div class="score__title">この調子!</div> 20 <div class="score__score">40<span>点</span></div> 21 <div id="btn__reset" class="btn btn__continue">Continue!!</div> 22 </div> 23 </div> 24 <div id="cheer" class="score"> 25 <div class="score__container score__success"> 26 <div class="score__title">頑張ろう!</div> 27 <div class="score__score">40<span>点</span></div> 28 <div id="btn__reset" class="btn btn__continue">Continue!!</div> 29 </div> 30 </div>
js
1//テストコード 2{ 3const btn = document.getElementById('btn'); 4 5function callback() { 6 btn.classList.add('active'); 7} 8 9btn.addEventListener('click',callback); 10} 11
HTML
1
補足情報
mac、VScode使用。