以前似たような質問をさせていただきました。重複しない乱数処理を以下の国旗ゲームで練習しています。
おかげさまでsortを用いた乱数は使えるようになりましたが、この乱数は穴があると教えていただきました。なので、フィッシャーイェーツの乱数を練習したいのですが、以下のようにすると機能しません。おそらく以下のShuffleとsetQuestionに問題があると思うのですが、アドバイスいただけますか?
var Shuffle = function(arr) { var i, j, temp; arr = flags.slice(); i = flags.length; if (i === 0) { return arr; } while (--i){ j = Math.floor(Math.random() * (i + 1)); temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } return arr; } function setQuestion() { if(flags.length <= 0) { alert('お疲れ様でした。問題は以上です。あなたのスコアは ' + score + '点です。') } flag = Shuffle(flags); question.children[0].src = 'img/' + flag[0]; answer = flag[1]; }
念の為、この下に全体コードを貼らせていただきます。
(function() { 'use strict'; var question = document.getElementById('question'); var btn = document.getElementById('btn'); var input = document.getElementById('input'); var check = document.getElementById('check'); var timerLabel = document.getElementById('timer'); var scoreLabel = document.getElementById('score'); var pass = document.getElementById('pass'); var answer = ''; var score = 0; var timerId; var isPlaying = false; var timer; var flag; var previous = []; var flags = [ ['Nepal.png', 'ネパール'], ['India.png', 'インド'], ['Netherland.png', 'オランダ'], ['Chili.png', 'チリ'], ['Morocco.png', 'モロッコ'], ['Luxembourg.png', 'ルクセンブルク'], ['Singapore.png', 'シンガポール'], ['Pakistan.png', 'パキスタン'], ['Azerbaijan.png', 'アゼルバイジャン'], ['Jamaica.png', 'ジャマイカ'], ['Belgium.png', 'ベルギー'], ['Guana.png', 'ガーナ'], ['SierraLeone.png', 'シエラレオネ'], ['Korea.png','韓国'], ['Japan.png','日本'], ['China.png','中国'], ['Mongolia.png','モンゴル'], ['Philippines.png', 'フィリピン'], ['Italy.png', 'イタリア'], ['Egypt.png', 'エジプト'], ['Australia.png','オーストラリア'], ['NewZealand.png', 'ニュージーランド'], ].sort(() => Math.random() - 0.5); function init() { isPlaying = false; timer = 100; score = 0; scoreLabel.innerHTML = ''; scoreLabel.className = ''; timerLabel.className = ''; timerLabel.innerHTML = timer; btn.className = ''; check.className = 'invisible'; } init(); function updateTimer() { timerId = setTimeout(function() { timer--; if(timer <=10) { timerLabel.classList.add('danger'); } timerLabel.innerHTML = timer; if(timer <= 0) { alert('Game Overです。お疲れ様でした。あなたのスコアは ' + score + '点です。'); clearTimeout(); init(); return; } updateTimer(); }, 1000); } var Shuffle = function(arr) { var i, j, temp; arr = flags.slice(); i = flags.length; if (i === 0) { return arr; } while (--i){ j = Math.floor(Math.random() * (i + 1)); temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } return arr; } function setQuestion() { if(flags.length <= 0) { alert('お疲れ様でした。問題は以上です。あなたのスコアは ' + score + '点です。') } flag = Shuffle(flags); question.children[0].src = 'img/' + flag[0]; answer = flag[1]; } btn.addEventListener('click', function() { if (!isPlaying) { btn.classList.add('invisible'); check.classList.remove('invisible'); isPlaying = true; updateTimer(); setQuestion(); } }); check.addEventListener('click', function() { if(input.value !== '' && isPlaying) { score += (input.value === answer)? 1: -1; if(score < 0) { scoreLabel.classList.add('danger'); } else { scoreLabel.className = ''; } scoreLabel.innerHTML = score; input.value = ''; input.focus(); setQuestion(); } }); pass.addEventListener('click', function() { if(!isPlaying) { return; } setQuestion(); }); })();
『機能しません』とは具体的には何が起きていますか? エラーメッセージがあるならエラーメッセージをご提示ください。
Netherland.png が存在しない、というエラーのようです。
『機能しません』とは具体的には「画像が見えない」ということだったのですか?
すいません。そういうことです。うまく画像が表示されません。フィーシャーのやり方をするまでは映ってたので多分何らかがおかしいと思います
それとは関係ないだろうなあ、という感じがしてます。
あと、エラーメッセージ内に本名っぽいものが混じってますが、大丈夫ですか?
基本的に気にしませんが、一応削除依頼させていただきました。ご指摘ありがとうございました
コメントは編集出来ます。履歴も参照されません。
"williamsArk 2019/02/16 09:58 編集 あ" では意味が分かりません。後で読んだ人が時系列を追えるように修正して下さい。この質疑応答は質問者のみが参考にするものではなく、共有情報となります。
承知いたしました。覚えている限り訂正しました。
回答2件
あなたの回答
tips
プレビュー