私はゲームを作っています。タイピングゲームなのですが、ゲーム本体の実装はできました。
しかし、ランキングを作ろうとしているのですが、さまざまなエラーが発生してしまいます。
以下に私の実現させたいことと、これまだの編集の経緯をご説明しますので、最後に記す質問にお答えいた抱きたいです。
*実現したい内容*
- ランキングの生成(5位まで)→下のJSではすでに完成している。
- タイマーの可視化
*ゲームの流れ*
html内にある指定されたボタンをクリック
↓
名前を入力
↓
ゲーム開始(裏でタイマーが作動)
↓
ゲーム終了
(タイマーが停止し、ランキングを表示して終了)
*初期のデメリット*
・タイマーが表示されないため、自分が実際にどのくらいの時間かかっているかはわからない。
→タイマーの可視化によってかかった時間を表示させたい
※具体的に言うと・・・
html内にある指定されたボタンをクリック
↓
名前を入力
↓
ゲーム開始+**タイマーを表示&カウント開始**
↓
ゲーム終了
(タイマーが停止し、ランキングを表示し直して終了)
*JavaScript(初期)*
html
1<script> 2 var r=[ 3 ['59:59.95','abc'], 4 ['59:59.96','xyz'], 5 ['59:59.97','ijk'], 6 ['59:59.98','aaa'], 7 ['59:59.99','zzz'], 8 ]; 9 var qs=[ 10 'q1', 11 'q2', 12 ]; 13 const viewRank=()=>{ 14 document.querySelector('#rank span').innerHTML=r.map(x=>x.join(" ")).join("<br>"); 15 }; 16 window.addEventListener('DOMContentLoaded',()=>{ 17 viewRank(); 18 document.querySelector('#start').addEventListener('click',e=>{ 19 const t1=e.target; 20 const t2=document.querySelector('#a'); 21 t1.disabled=true; 22 t2.disabled=false; 23 const name=prompt("お名前を入力してください。"); 24 if(name=="") name="UnKnown"; 25 (async()=>{ 26 const s=new Date().getTime(); 27 for(var i=0;i<qs.length;i++){ 28 const qStr=qs[i]; 29 document.querySelector('#q span').textContent=qStr; 30 t2.value=""; 31 t2.focus(); 32 await new Promise(resolve=>{ 33 const timerId=setInterval(()=>{ 34 if(t2.value==qStr){ 35 clearInterval(timerId); 36 resolve(); 37 } 38 },10); 39 }); 40 } 41 const e=new Date().getTime(); 42 const diff=e-s; 43 const str=(10000+diff/1000).toString(); 44 const time=str.substr(1,2)+":"+ 45 str.substr(3,5); 46 r.push([time,name]); 47 r=await r.sort((x,y)=>x[0]>y[0]?1:-1).splice(0,5); 48 viewRank(); 49 t1.disabled=false; 50 t2.disabled=true; 51 })(); 52 }); 53 }); 54</script> 55<input type="button" value="ゲームスタート!" id="start"> 56<font size="5"><div id="q">Q:<span>ここに問題が表示されます。</span></div></font> 57<div>A:<input type="text" id="a"></div> 58<table border="1"> 59<tr> 60<td> 61<div id="rank">現在のランキングトップ5<br> 62 <center><span></span></center> 63</div> 64 </td></tr></table>
*JavaScript(現状)*
html
1<script> 2var r=[ 3 ['59:59.95','abc'], 4 ['59:59.96','xyz'], 5 ['59:59.97','ijk'], 6 ['59:59.98','aaa'], 7 ['59:59.99','zzz'], 8 ]; 9 var qs=[ 10 'q1', 11 'q2', 12 ]; 13 const viewRank=()=>{ 14 document.querySelector('#rank span').innerHTML=r.map(x=>x.join(" ")).join("<br>"); 15 }; 16 window.addEventListener('DOMContentLoaded',()=>{ 17 viewRank(); 18 document.querySelector('#start').addEventListener('click',e=>{ 19 const t1=e.target; 20 const t2=document.querySelector('#a'); 21 t1.disabled=true; 22 t2.disabled=false; 23 const name=prompt("お名前を入力してください。"); 24 if(name=="") name="UnKnown"; 25 (async()=>{ 26 const s=new Date().getTime(); 27 for(var i=0;i<qs.length;i++){ 28 const qStr=qs[i]; 29 document.querySelector('#q span').textContent=qStr; 30 t2.value=""; 31 t2.focus(); 32 await new Promise(resolve=>{ 33 const timerId=setInterval(()=>{ 34 if(t2.value==qStr){ 35 clearInterval(timerId); 36 resolve(); 37 } 38 },10); 39 }); 40 } 41 const e=new Date().getTime(); 42 const diff=e-s; 43 const str=(10000+diff/1000).toString(); 44 const time=str.substr(1,2)+":"+ 45 str.substr(3,5); 46 r.push([time,name]); 47 r=await r.sort((x,y)=>x[0]>y[0]?1:-1).splice(0,5); 48 viewRank(); 49 t1.disabled=false; 50 t2.disabled=true; 51 })(); 52 }); 53 }); 54</script> 55<input type="button" value="ゲームスタート!" id="start"> 56<font size="5"><div id="q">Q:<span>ここに問題が表示されます。</span></div></font> 57<div>A:<input type="text" id="a"></div> 58<br> 59<br> 60<script> 61 document.getElementById("start").onclick = function() { 62 PassSec = 0; 63 PassageID = setInterval('showPassage()',1000); 64 document.getElementById("start").disabled = true; 65 }; 66</script> 67<br> 68<br> 69<table border="1"> 70 <tr> 71 <td> 72 <div id="rank">現在のランキングトップ5<br> 73 <center><span></span></center> 74 </div> 75 </td> 76 </tr> 77</table>
*現状の問題点*
タイマーが表示されるように修正しようとしましたが、どこにクリック部分のidを設定したいいのかわかりませんでした。きっとidが設定されることで表示できると思います。
万が一idを設定できない環境である場合、どのようにしたらいいかなども教えてください。
回答2件
あなたの回答
tips
プレビュー