三択クイズを作ってみよう
正解・不正解の判定と次の問題の表示
次は正解・不正解の判定機を作るッピ!
ここは一気にコードを公開するッピよ~
JavaScript
//次の問題を表示するためのプログラムです
function Q_(oxq) {
if (oxq === 0){
r_1 = Q.length / 5;
r_2 = Math.floor( Math.random() * r_1 );
R = (r_2 * 5);
document.getElementById("ox").innerHTML = '';
document.getElementById("quiz").innerHTML = '';
quiz = document.getElementById('quiz');
quiz.insertAdjacentHTML('afterbegin', '<p>'+Q[R]+'</p>');
quiz.insertAdjacentHTML('beforeend', '<button'+Q[R+1]+'</button><br/>');
quiz.insertAdjacentHTML('beforeend', '<button'+Q[R+2]+'</button><br/>');
quiz.insertAdjacentHTML('beforeend', '<button'+Q[R+3]+'</button><br/>');
} else if (oxq === 1) {//正解時の実行プログラムです
document.getElementById("ox").innerHTML = '<p>正解!</p>';
document.getElementById("quiz").innerHTML = '<p>'+Q[R+4]+'</p>';
document.getElementById("next").innerHTML = '<p><button onClick="Q_(0);">次の問題へ</button></p>';
} else if (oxq === 2) {//失敗時の実行プログラムです
document.getElementById("ox").innerHTML = '<p>不正解!</p>';
document.getElementById("quiz").innerHTML = '<p>'+Q[R+4]+'</p>';
document.getElementById("next").innerHTML = '<p><button onClick="Q_(0);">次の問題へ</button></p>';
}
}
HTML
<script>
document.write('<p id="ox"></p>');
document.write('<p id="quiz">');
document.write(Q[R+0] +'<br/>');
document.write('<button'+ Q[R+1] +'</button><br/>');
document.write('<button'+ Q[R+2] +'</button><br/>');
document.write('<button'+ Q[R+3] +'</button><br/>');
document.write('</p>');
document.write('<p id="next"><button onClick="Q_(0);">次の問題へ</button></p>');
</script>
お! できた~!
全体のコード
<html>
<head>
<script>
let Q = [//クイズ
'Q.日本で一番高い山は?',
' onclick="Q_(1);" >富士山',
' onclick="Q_(2);" >北岳',
' onclick="Q_(2);" >奥穂高岳',
'日本で一番高い山は富士山。なんと3,776Mもあります。',
'Q.アメリカ合衆国の首都はどこでしょう?',
' onclick="Q_(1);" >ワシントンDC',
' onclick="Q_(2);" >ニューヨーク',
' onclick="Q_(2);" >ロサンゼルス',
'常識といえば常識ですが、意外と間違いやすいのがこのクイズ。<br/>正解はワシントンDC。ニューヨークではりませんよ。',
'Q.世界三大珍味は何?',
' onclick="Q_(2);" >うに、からすみ、このわた',
' onclick="Q_(2);" >すし、らーめん、てんぷら',
' onclick="Q_(1);" >フォアグラ、キャビア、トリュフ',
'世界三大珍味は一般的にキャビア・フォアグラ・トリュフと言われています。',
'Q.次のうち、イタリアにないものなーんだ?',
' onclick="Q_(2);" >ピザ',
' onclick="Q_(2);" >アクアパッツァ',
' onclick="Q_(1);" >ナポリタン',
'正解はナポリタン。ナポリにナポリタンはありません!',
'Q.日本で初めてノーベル賞を取った人は誰でしょう?',
' onclick="Q_(2);" >川端康成',
' onclick="Q_(1);" >湯川秀樹',
' onclick="Q_(2);" >佐藤栄作',
'日本初のノーベル賞を受賞したのは湯川秀樹さん。',
'Q.ハロウィンで子供がお菓子を貰うお馴染みのセリフはなーんだ?',
' onclick="Q_(2);" >ハッピーハロウィーン',
' onclick="Q_(1);" >トリック・オア・トリート ',
' onclick="Q_(2);" >メリークリスマス',
'「お菓子をくれなきゃイタズラするよ」でおなじみのこのフレーズ。<br/>ハロウィーンは、もともと古代ケルト民族でのサウィン祭りが起源といわれています。',
];
let r_1 = Q.length / 5;//クイズを出すための変数
let r_2 = Math.floor( Math.random() * r_1 ) ;
let R = (r_2 * 5) ;//クイズを出すための変数
//次の問題を表示するためのプログラムです
function Q_(oxq) {
if (oxq === 0){
r_1 = Q.length / 5;
r_2 = Math.floor( Math.random() * r_1 );
R = (r_2 * 5);
document.getElementById("ox").innerHTML = '';
document.getElementById("quiz").innerHTML = '';
quiz = document.getElementById('quiz');
quiz.insertAdjacentHTML('afterbegin', '<p>'+Q[R]+'</p>');
quiz.insertAdjacentHTML('beforeend', '<button'+Q[R+1]+'</button><br/>');
quiz.insertAdjacentHTML('beforeend', '<button'+Q[R+2]+'</button><br/>');
quiz.insertAdjacentHTML('beforeend', '<button'+Q[R+3]+'</button><br/>');
} else if (oxq === 1) {//正解時の実行プログラムです
document.getElementById("ox").innerHTML = '<p>正解!</p>';
document.getElementById("quiz").innerHTML = '<p>'+Q[R+4]+'</p>';
document.getElementById("next").innerHTML = '<p><button onClick="Q_(0);">次の問題へ</button></p>';
} else if (oxq === 2) {//失敗時の実行プログラムです
document.getElementById("ox").innerHTML = '<p>不正解!</p>';
document.getElementById("quiz").innerHTML = '<p>'+Q[R+4]+'</p>';
document.getElementById("next").innerHTML = '<p><button onClick="Q_(0);">次の問題へ</button></p>';
}
}
</script>
</head>
<body>
<script>
document.write('<p id="ox"></p>');
document.write('<p id="quiz">');
document.write(Q[R+0] +'<br/>');
document.write('<button'+ Q[R+1] +'</button><br/>');
document.write('<button'+ Q[R+2] +'</button><br/>');
document.write('<button'+ Q[R+3] +'</button><br/>');
document.write('</p>');
document.write('<p id="next"><button onClick="Q_(0);">次の問題へ</button></p>');
</script>
</body>
</html>
今度はこのコードをじっくり解説するッピよ~!
回答ボタンとリスト引数
まずは問題文を表示するプログラムッピ!
問題文の表示?
さっきやらなかったっけ??
さっきの
document.write(Q[R+0] +'<br/>');
document.write(Q[R+1] +'<br/>');
document.write(Q[R+2] +'<br/>');
document.write(Q[R+3] +'<br/>');
これだけでは選択肢のボタンを追加できないッピ!
ボタンとは
という、押すと新しいアクションをするものッピ!
これを使って当たりハズレを決めるプログラムを勉強していくッピよ~
オッケー!
上の
document.write(Q[R+0] +'<br/>');
document.write(Q[R+1] +'<br/>');
document.write(Q[R+2] +'<br/>');
document.write(Q[R+3] +'<br/>');
コードを消して、新しく書いたコードがこれッピ!
document.write('<p id="ox"></p>');
document.write('<p id="quiz">');
document.write(Q[R+0] +'<br/>');
document.write('<button'+ Q[R+1] +'</button><br/>');
document.write('<button'+ Q[R+2] +'</button><br/>');
document.write('<button'+ Q[R+3] +'</button><br/>');
document.write('</p>');
document.write('<p id="next"><button onClick="Q_(0);">次の問題へ</button></p>');
↑のコードをざっくり説明すると
<p id=“ox“></p> //当たりハズレを表示
<p id=“quiz“>//問題文とボタンを表示
★問題文を表示★<br/>
<button>回答ボタン1</button> <br/>
<button>回答ボタン2</button> <br/>
<button>回答ボタン3</button> <br/>
</p>
<p id=“next“><button onClick=“Q_(0);“> 次の問題へ </button></p>
という意味ッピ!
document.write(Q[R+1] +'<br/>');
元のコードにボタン<button>を加えて
document.write('<button'+ Q[R+1] +'</button><br/>');
にしたのが大幅に変わった点ッピ!
そして問題文にも
let Q = [//クイズ
'Q.日本で一番高い山は?',
' onclick="Q_(1);" >富士山',
' onclick="Q_(2);" >北岳',
' onclick="Q_(2);" >奥穂高岳',
'日本で一番高い山は富士山。なんと3,776Mもあります。',
];
と、答えの中に
onclick="Q_(1);" >
onclick="Q_(2);" >
と引数を付け加えたッピ!
この document.write (); の <button> と onclick=”Q_(1);” >を組み合わせることによって
document.write('<button'+ Q[R+1] +'</button><br/>');
が
<button onclick=”Q_(1);” > 回答ボタン1 </button><br/>
という意味になるッピ!
んん?
引数ってなんだ~??
良い質問ッピ!
引数というのは、
プログラムセットfunction関数で使われる仮の変数ッピ!
仮の変数~?
ふふふふふ
詳しくは次のfunctionの項目で説明するッピよ~
function関数とif分岐で当たりハズレを判別する
ひとまずここでfunction関数について説明するッピ!
function関数とは
function 関数名( 引数 ) { 命令文 ;}
でプログラムセットをつくることッピ!
そしてこの引数に入力した、数字や文字などで、正解や不正解・・・プログラムを実行するかしないかを決めることができるッピよ~
if分岐と引数を使って正解か判別する
このfanction関数にさらにif文を使って、正解かどうか判別するプログラムをつくることができるッピ!
こんな感じに判別プログラムをつくるッピよ~
function Q_(oxq) {
if (oxq === 0){ 次の問題を表示するプログラム }
if (oxq === 1){ 【当たり】のプログラム }
if (oxq === 2){ 『ハズレ』 のプログラム }
}
これは
function Q_(oxq) {
if (oxq === 0){ 次の問題を表示するプログラムを実行 }
else if (oxq === 1){ 【当たり】のプログラム を実行 }
else if (oxq === 2){ 『ハズレ』 のプログラム を実行 }
}
っていう意味ッピ!
実際のプログラムはこんなコードになっているッピ
//次の問題を表示するためのプログラムです
function Q_(oxq) {
if (oxq === 0){//次の問題を表示するプログラムを実行
r_1 = Q.length / 5;
r_2 = Math.floor( Math.random() * r_1 );
R = (r_2 * 5);
document.getElementById("ox").innerHTML = '';
document.getElementById("quiz").innerHTML = '';
quiz = document.getElementById('quiz');
quiz.insertAdjacentHTML('afterbegin', '<p>'+Q[R]+'</p>');
quiz.insertAdjacentHTML('beforeend', '<button'+Q[R+1]+'</button><br/>');
quiz.insertAdjacentHTML('beforeend', '<button'+Q[R+2]+'</button><br/>');
quiz.insertAdjacentHTML('beforeend', '<button'+Q[R+3]+'</button><br/>');
} else if (oxq === 1) {//正解時の実行プログラムです
document.getElementById("ox").innerHTML = '<p>正解!</p>';
document.getElementById("quiz").innerHTML = '<p>'+Q[R+4]+'</p>';
document.getElementById("next").innerHTML = '<p><button onClick="Q_(0);">次の問題へ</button></p>';
} else if (oxq === 2) {//失敗時の実行プログラムです
document.getElementById("ox").innerHTML = '<p>不正解!</p>';
document.getElementById("quiz").innerHTML = '<p>'+Q[R+4]+'</p>';
document.getElementById("next").innerHTML = '<p><button onClick="Q_(0);">次の問題へ</button></p>';
}
}
さきほどもいったように
<button oncClick=”関数名( 引数 );”> 回答ボタン </button>
で function 関数名(引数) を実行することができるッピ!
これは
<button‘+Q[R+1]+'</button>
というところがそれに当たるッピよ~
最終的に
<button onClick=”Q_(1);”> 回答ボタン </button>
else if (oxq === 1) { 正解時のプログラムが実行 }
という流れになるッピ!
やっぱりなんだか難しいな~
ユウキくんがこんがらがるのもムリないッピ・・・・
例えていうなら
a = b = c
c = a みたいなものッピね!
文字を表示する
次は文字を表示するためのプログラムッピね
else if (oxq === 1) {//正解時の実行プログラムです
document.getElementById("ox").innerHTML = '<p>正解!</p>';
document.getElementById("quiz").innerHTML = '<p>'+Q[R+4]+'</p>';
document.getElementById("next").innerHTML = '<p><button onClick="Q_(0);">次の問題へ</button></p>';
}
がそれに当たるッピ!
正解時のプログラム・・・これは
else if (oxq === 1) {
document.getElementById(“ox“).innerHTML = ‘<p>正解!</p>‘;
document.getElementById(“quiz“).innerHTML = ‘<p>‘ + Q[R+4] + ‘</p>‘;
document.getElementById(“next“).innerHTML = ‘<p><button onclick=”Q_(0);“> 次の問題へ </button></p>‘;
}
という意味ッピ!
最初の
if (oxq === 0){//次の問題を表示するプログラムを実行
document.getElementById("ox").innerHTML = '';
document.getElementById("quiz").innerHTML = '';
quiz = document.getElementById('quiz');
quiz.insertAdjacentHTML('afterbegin', '<p>'+Q[R]+'</p>');
quiz.insertAdjacentHTML('beforeend', '<button'+Q[R+1]+'</button><br/>');
quiz.insertAdjacentHTML('beforeend', '<button'+Q[R+2]+'</button><br/>');
quiz.insertAdjacentHTML('beforeend', '<button'+Q[R+3]+'</button><br/>');
}
この
quiz = document.getElementById('quiz');
quiz.insertAdjacentHTML('afterbegin', '<p>'+Q[R]+'</p>');
quiz.insertAdjacentHTML('beforeend', '<button'+Q[R+1]+'</button><br/>');
quiz.insertAdjacentHTML('beforeend', '<button'+Q[R+2]+'</button><br/>');
quiz.insertAdjacentHTML('beforeend', '<button'+Q[R+3]+'</button><br/>');
は
quiz = document.getElementById(‘quiz‘);
quiz.insertAdjacentHTML(‘afterbegin‘, ‘<p>’+Q[R]+'</p>’);
quiz.insertAdjacentHTML(‘beforeend‘, ‘<button‘+Q[R+1]+'</button><br/>’);
quiz.insertAdjacentHTML(‘beforeend‘, ‘<button‘+Q[R+2]+'</button><br/>’);
quiz.insertAdjacentHTML(‘beforeend‘, ‘<button‘+Q[R+3]+'</button><br/>’);
という意味になるッピ!
全体のコードの確認
<html>
<head>
<script>
let Q = [//クイズ
'Q.日本で一番高い山は?',
' onclick="Q_(1);" >富士山',
' onclick="Q_(2);" >北岳',
' onclick="Q_(2);" >奥穂高岳',
'日本で一番高い山は富士山。なんと3,776Mもあります。',
'Q.アメリカ合衆国の首都はどこでしょう?',
' onclick="Q_(1);" >ワシントンDC',
' onclick="Q_(2);" >ニューヨーク',
' onclick="Q_(2);" >ロサンゼルス',
'常識といえば常識ですが、意外と間違いやすいのがこのクイズ。<br/>正解はワシントンDC。ニューヨークではりませんよ。',
'Q.世界三大珍味は何?',
' onclick="Q_(2);" >うに、からすみ、このわた',
' onclick="Q_(2);" >すし、らーめん、てんぷら',
' onclick="Q_(1);" >フォアグラ、キャビア、トリュフ',
'世界三大珍味は一般的にキャビア・フォアグラ・トリュフと言われています。',
'Q.次のうち、イタリアにないものなーんだ?',
' onclick="Q_(2);" >ピザ',
' onclick="Q_(2);" >アクアパッツァ',
' onclick="Q_(1);" >ナポリタン',
'正解はナポリタン。ナポリにナポリタンはありません!',
'Q.日本で初めてノーベル賞を取った人は誰でしょう?',
' onclick="Q_(2);" >川端康成',
' onclick="Q_(1);" >湯川秀樹',
' onclick="Q_(2);" >佐藤栄作',
'日本初のノーベル賞を受賞したのは湯川秀樹さん。',
'Q.ハロウィンで子供がお菓子を貰うお馴染みのセリフはなーんだ?',
' onclick="Q_(2);" >ハッピーハロウィーン',
' onclick="Q_(1);" >トリック・オア・トリート ',
' onclick="Q_(2);" >メリークリスマス',
'「お菓子をくれなきゃイタズラするよ」でおなじみのこのフレーズ。<br/>ハロウィーンは、もともと古代ケルト民族でのサウィン祭りが起源といわれています。',
];
let r_1 = Q.length / 5;//クイズを出すための変数
let r_2 = Math.floor( Math.random() * r_1 ) ;
let R = (r_2 * 5) ;//クイズを出すための変数
//次の問題を表示するためのプログラムです
function Q_(oxq) {
if (oxq === 0){
r_1 = Q.length / 5;
r_2 = Math.floor( Math.random() * r_1 );
R = (r_2 * 5);
document.getElementById("ox").innerHTML = '';
document.getElementById("quiz").innerHTML = '';
quiz = document.getElementById('quiz');
quiz.insertAdjacentHTML('afterbegin', '<p>'+Q[R]+'</p>');
quiz.insertAdjacentHTML('beforeend', '<button'+Q[R+1]+'</button><br/>');
quiz.insertAdjacentHTML('beforeend', '<button'+Q[R+2]+'</button><br/>');
quiz.insertAdjacentHTML('beforeend', '<button'+Q[R+3]+'</button><br/>');
} else if (oxq === 1) {//正解時の実行プログラムです
document.getElementById("ox").innerHTML = '<p>正解!</p>';
document.getElementById("quiz").innerHTML = '<p>'+Q[R+4]+'</p>';
document.getElementById("next").innerHTML = '<p><button onClick="Q_(0);">次の問題へ</button></p>';
} else if (oxq === 2) {//失敗時の実行プログラムです
document.getElementById("ox").innerHTML = '<p>不正解!</p>';
document.getElementById("quiz").innerHTML = '<p>'+Q[R+4]+'</p>';
document.getElementById("next").innerHTML = '<p><button onClick="Q_(0);">次の問題へ</button></p>';
}
}
</script>
</head>
<body>
<script>
document.write('<p id="ox"></p>');
document.write('<p id="quiz">');
document.write(Q[R+0] +'<br/>');
document.write('<button'+ Q[R+1] +'</button><br/>');
document.write('<button'+ Q[R+2] +'</button><br/>');
document.write('<button'+ Q[R+3] +'</button><br/>');
document.write('</p>');
document.write('<p id="next"><button onClick="Q_(0);">次の問題へ</button></p>');
</script>
</body>
</html>
- リスト配列 let リスト名 = []; でクイズと答えをつくる
- 乱数 Math.floor( Math.random() * r_1 ) で問題を選ぶ
- document.getElementById(“ID名”)とボタンで ID場所を変化させる
- <button></button>でボタンの設置
- function 関数名 {} でプログラムセットを作る
- onClick=”関数名(引数);” で 当たりハズレを判定する
上手くできたッピか?
これからも色んなゲーム作りやプログラムの解説をしていくッピ!
次回も楽しみにしているッピよ~~!