2016-09-05 5 views
0

私は他の誰かによって作られた複数の選択肢のクイズを持っていますが、今は私を助けるために利用できません。私はコーディングに新しいです。私は順番に自分のオプションを持っていたい。現在、オプションを入力すると、オプション1が常に正解になり、コードは自動的にオプションをランダム化して、生徒がクイズを行うときに正しい権利がオプション1になることはありません。誰かが私を助けて、正しい答えを検出できる間にオプションをコードに入れたのと同じ順番にすることができますか?ありがとうございました!クイズ複数の選択肢を無作為化する方法

Javascriptを:

$(document).ready(function() { 

var questionNumber=0; 
var questionBank=new Array(); 
var stage="#game1"; 
var stage2=new Object; 
var questionLock=false; 
var numberOfQuestions; 
var score=0; 


    $.getJSON('activity.json', function(data) { 

    for(i=0;i<data.quizlist.length;i++){ 
     questionBank[i]=new Array; 
     questionBank[i][0]=data.quizlist[i].question; 
     questionBank[i][1]=data.quizlist[i].option1; 
     questionBank[i][2]=data.quizlist[i].option2; 
     questionBank[i][3]=data.quizlist[i].option3; 
     questionBank[i][4]=data.quizlist[i].option4; 
     questionBank[i][5]=data.quizlist[i].option5; 
    } 
    numberOfQuestions=questionBank.length; 


    scrambleDatabase(); 
    displayQuestion(); 
    })//gtjson 


fillDB(); 

function scrambleDatabase(){ 
for(i=0;i<60;i++){ 
var rnd1=Math.floor(Math.random()*questionBank.length); 
var rnd2=Math.floor(Math.random()*questionBank.length); 

var temp=questionBank[rnd1]; 
questionBank[rnd1]=questionBank[rnd2]; 
questionBank[rnd2]=temp; 

}//i 

}//scdb 

function displayQuestion(){ 
var rnd=Math.random()*3; 
rnd=Math.ceil(rnd); 
var q1; 
var q2; 
var q3; 
var q4; 
var q5; 


if(rnd==1){q1=questionBank[questionNumber][1];q2=questionBank[questionNumber][2];q3=questionBank[questionNumber][3];q4=questionBank[questionNumber][4];q5=questionBank[questionNumber][5];} 
if(rnd==2){q2=questionBank[questionNumber][1];q3=questionBank[questionNumber][2];q1=questionBank[questionNumber][3];q4=questionBank[questionNumber][4];q5=questionBank[questionNumber][5];} 
if(rnd==3){q3=questionBank[questionNumber][1];q4=questionBank[questionNumber][2];q5=questionBank[questionNumber][3];q1=questionBank[questionNumber][4];q2=questionBank[questionNumber][5];} 
if(rnd==4){q4=questionBank[questionNumber][1];q5=questionBank[questionNumber][2];q1=questionBank[questionNumber][3];q2=questionBank[questionNumber][4];q3=questionBank[questionNumber][5];} 
if(rnd==5){q5=questionBank[questionNumber][1];q1=questionBank[questionNumber][2];q2=questionBank[questionNumber][3];q3=questionBank[questionNumber][4];q4=questionBank[questionNumber][5];} 

$(stage).append('<div class="questionText"><img src="play.png"></br>What sound is this?</div><div id="1" class="option">'+q1+'</div><div id="2" class="option">'+q2+'</div><div id="3" class="option">'+q3+'</div><div id="4" class="option">'+q4+'</div><div id="5" class="option">'+q5+'</div>'); 

$('.option').click(function(){ 
    if(questionLock==false){questionLock=true;  
    //correct answer 
    if(this.id==rnd){ 
$(stage).append('<div class="feedback1"><img src="happy.png">CORRECT</div>'); 
    currentSoundName="sounds/correct.mp3"; 
    $("#dummy")[0].innerHTML='<audio id="correcttag"  src='+currentSoundName+' autobuffer="autobuffer"></audio>'; 
    $('#correcttag')[0].play(); 
    score++; 
    } 
    //wrong answer 
     if(this.id!=rnd){ 
    $(stage).append('<div class="feedback2"><img src="sad.png">WRONG</div>'); 
    currentSoundName="sounds/incorrect.mp3"; 
    $("#dummy")[0].innerHTML='<audio id="correcttag"  src='+currentSoundName+' autobuffer="autobuffer"></audio>'; 
    $('#correcttag')[0].play(); 

} 
    setTimeout(function(){changeQuestion()},1000); 
}}) 

currentSoundName="sounds/"+questionBank[questionNumber][0]; 

    $('.questionText').click(function(){ 
    $("#dummy")[0].innerHTML='<audio id="audiotag" src='+currentSoundName+' autobuffer="autobuffer"></audio>'; 
$('#audiotag')[0].play();        


}) 

}//display question 



function changeQuestion(){ 

    questionNumber++; 

if(stage=="#game1"){stage2="#game1";stage="#game2";} 
    else{stage2="#game2";stage="#game1";} 

if(questionNumber<numberOfQuestions){displayQuestion();}else{displayFinalSlide();} 

$(stage2).animate({"right": "+=800px"},"slow", function() {$(stage2).css('right','-800px');$(stage2).empty();}); 
$(stage).animate({"right": "+=800px"},"slow", function() {questionLock=false;}); 
}//change question 




function displayFinalSlide(){ 

    $(stage).append('<div class="questionText">You have finished the quiz!<br><br>Total questions: '+numberOfQuestions+'<br>Correct answers: '+score+'</div>'); 

}//display final slide 






});//doc ready 

HTML: JSON::

<!DOCTYPE html> 
<head> 

<title>Quiz</title> 
<link href="main.css"rel="stylesheet"type="text/css"/> 
<meta name=viewport content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> 
<script src="jquery.js"></script> 
<script src="controller.js"></script> 

</head> 
<body> 

<div id="topbar">Quiz</div> 
<div class="spacer"></div> 

<div id="navContent"> 

<div id="game1"></div> 
<div id="game2"></div> 
</div> 


<span id="dummy"></span> 

</body> 
</html> 

私の質問データバンクは、このようなJSONファイルである

{"quizlist":[ 

{ 
"question":"ba.mp3", 
"option1":"a", 
"option2":"b", 
"option3":"c", 
"option4":"d", 
"option5":"e" 
} 
+0

ランダム化するオプションの回答を止めたい場合は、呼び出し文を削除/コメントして** scrambleDatabase **関数を呼び出さないでください。 –

答えて

0

私は、次の編集を行います。

正解のための余分なフィールドを含むように最初の編集、あなたの質問データバンクJSONファイル(答えの番号を使用):

{"quizlist":[ 

{ 
"question":"ba.mp3", 
"answer":2, 
"option1":"a", 
"option2":"b", 
"option3":"c", 
"option4":"d", 
"option5":"e" 
} 

その後、あなたのデータバンク配列にこの回答を読んで

questionBank[i][0]=data.quizlist[i].question; 
questionBank[i][1]=data.quizlist[i].option1; 
questionBank[i][2]=data.quizlist[i].option2; 
questionBank[i][3]=data.quizlist[i].option3; 
questionBank[i][4]=data.quizlist[i].option4; 
questionBank[i][5]=data.quizlist[i].option5; 
questionBank[i][6]=data.quizlist[i].answer; 

その後、tehの答えをランダム化し、ちょうどあなたのための変数への答えを読んで、RNDで正解を保存セクションを削除(私は名前を変更するでしょう。この変数):

function displayQuestion(){ 

var q1 = questionBank[questionNumber][1]; 
var q2 = questionBank[questionNumber][2]; 
var q3 = questionBank[questionNumber][3]; 
var q4 = questionBank[questionNumber][4]; 
var q5 = questionBank[questionNumber][5]; 
var rnd = questionBank[questionNumber][6]; 

$(stage).append('<div class="questionText"><img src="play.png"></br>What sound is this?</div><div id="1" class="option">'+q1+'</div><div id="2" class="option">'+q2+'</div><div id="3" class="option">'+q3+'</div><div id="4" class="option">'+q4+'</div><div id="5" class="option">'+q5+'</div>'); 

そして、それはそれを

EDITを行う必要があります:これは、マルチ選択クイズを製造する私れる好ましい方法であることwouldntのそれはあなたがあなたの既存のコードに最小限の編集で何をしたいあなたを与える必要があります。

+0

申し訳ありません私は、私の質問はランダムではなく、オプションではないと言うことを忘れていました。したがって、私のコードでランダマイザを削除すると、質問は順調になります。ちょうどオプションを無作為化するためにとにかくありますか?ありがとうございました。 – Shannon

+0

@Shannon申し訳ありません。それはまだ質問を無作為化します。私はアンワースをランダム化するビットを削除することを意味しました。私は、明らかに明確になるように答えを編集しました。 – CeejeeB

関連する問題