タイピングゲームを作成しているのですが、問題をつながった文にしているために
指定された順序で出題したいと考えています。
ランダムに出題するプログラムはいろいろ検索し、できました。
現時点で以下のようなJavaScript/htmlになっています。
ここからうまく書き換えて指定された順序で出題する方法を教えてください。
よろしくお願いします
html
1<script> 2var r=[ 3 ['00:30.00','abc'], 4 ['01:00.00','xyz'], 5 ['01:30.00','ijk'], 6 ['02:30.00','aaa'], 7 ['03:00.00','zzz'], 8 ]; 9var qs=[ 10 'Hello World', 11 'Good', 12 'I love JavaScript', 13 'This is MyApp', 14 'Welcome' 15 ]; 16const viewRank=()=>{ 17 document.querySelector('#rank span').innerHTML=r.map(x=>x.join(" ")).join("<br>"); 18}; 19window.addEventListener('DOMContentLoaded',()=>{ 20 viewRank(); 21 document.querySelector('#start').addEventListener('click',e=>{ 22 const t1=e.target; 23 const t2=document.querySelector('#a'); 24 t1.disabled=true; 25 t2.disabled=false; 26 const name=prompt("your name?"); 27 if(name=="") name="noname"; 28 (async()=>{ 29 qs=qs.map(x=>[x,Math.random()]).sort((x,y)=>x[1]-y[1]).map(x=>x[0]); 30 const s=new Date().getTime(); 31 for(var i=0;i<qs.length;i++){ 32 const qStr=qs[i]; 33 document.querySelector('#q span').textContent=qStr; 34 t2.value=""; 35 t2.focus(); 36 await new Promise(resolve=>{ 37 const timerId=setInterval(()=>{ 38 if(t2.value==qStr){ 39 clearInterval(timerId); 40 resolve(); 41 } 42 },10); 43 }); 44 } 45 const e=new Date().getTime(); 46 const diff=e-s; 47 const str=(10000+diff/1000).toString(); 48 const time=str.substr(1,2)+":"+ 49 str.substr(3,5); 50 r.push([time,name]); 51 //r=await r.sort((x,y)=>x[0]>y[0]).splice(0,5); 52 //以下修正版 53 r=await r.sort((x,y)=>x[0]>y[0]?1:-1).splice(0,5); 54 viewRank(); 55 t1.disabled=false; 56 t2.disabled=true; 57 })(); 58 }); 59}); 60 61</script> 62<input type="button" value="start" id="start"> 63<div id="q">Q:<span></span></div> 64<div>A:<input type="text" id="a"></div> 65<div id="rank">rank:<br> 66<span></span></div>
回答1件
あなたの回答
tips
プレビュー