第5回は、OXゲームを作っていきます。
今回は流れてくるOとXを素早く判断して、ポイントを稼ぐゲームです。
1. 初期データのダウンロード
① 以下のURLにアクセス
https://drive.google.com/drive/folders/1wDrp4Dlu_QsNMby2Sg5jcyvEcbvCGBD4?usp=drive_link
② OXゲーム 教材.zip をダウンロード
③ ダウンロードにあるZipファイルを解凍。
④
の「基本的なはじめ方」を参考に準備する。
2. 基本要素の配置
【TRY】 必要なテキスト・画像 ・ ボタンの配置しよう
以下の概略図をもとに、必要な要素を配置していこう。
> は、あるタグの中にそのタグを入れてることを表すよ。
※できるだけ、解答を見ずにやってみよう。
【解答】 必要なテキスト・画像 ・ ボタンの配置しよう
今回は、画像やテキストなどをまず配置していくよ。
これではデザインがぐちゃぐちゃで何があるかわからないね。
今回は、先にデザインからととえていこう。
3. デザインを整えよう
デザインを整えるのに使うのはCSSだったね。実際にCSSを開いてコードを書いていこう。
【TRY】 デザインを調整しよう
画面全体 (body)
imageBox内にある画像全て
AnswerButtons
ボタン内にある画像全て
timer_text
resultText
リセットボタン
フォントをsans-serifフォントにするのは以下のように書くよ。
font-family: sans-serif;
※できるだけ、解答を見ずにやってみよう。
完成イメージ
【解答】 デザインを調整しよう
4. ランダムにOXを表示させよう
① 配列を作ろう
次に、10個の横並びが今は全部Oだけど、OとXがランダムに並ぶようにするよ。
そこで、初めに画面をロードした時の初期値のOかXを乱数を使って決めていくよ。
ここでは、for文(ループ文)を使っていくよ。
つまり、
さっき書いたこのコードは、
numという箱(変数)に、0か1をいれ、それを、quizListという箱の列(配列)の最後尾に置いているイメージだね。これを10回繰り返しているよ。
【TRY】 配列の数字を元に、OXの画像を表示しよう
赤い部分はスクショ通りに書いて、黄色の部分のコードは自分で考えてみよう
黄色の部分で使うコードは
だよ。
配列の中身のデータを取得する方法は、
quizList[2] で2番目のデータを取得するんだったね。
つまり、
iが0から9までの10回ループしている中で、
もし、image_◻︎のidを持つ画像を、i番目の配列のデータが0だったら、Oの画像を、そうでなかったらXの画像に変更するようにすればいい。
画像の変更の仕方がわからない場合は、前回のテキストを確認しよう。
【解答】 配列の数字を元に、OXの画像を表示しよう
5. 正解不正解の判定をしよう
少し難しいので、1行づつ何をしているか確認していこう。
まず、OもしくはXボタンが押されたとき、
answerというfunction(関数)が呼ばれる。そこで、Oボタンを押したときは、0, Xボタンを押した時は1がnumという変数に入れられるね。
これは前回使った、引数を用いている。
そして、quizList[0]すなわち、quizListの0番目がnumと等しいときは、正解ということだね。quizListには、Oの時は0, Xの時は1が入っているから、ボタンを押した時のnumと同じだね。
そして、正解した時は、correctAnswerという関数が呼ばれるよ。
ここで、まず、quizListの最初(0番目)を消すために、
quizList.shift();
と書いてある。
配列名.shift();
で配列の初めのデータを1個だけ削除できる。
そして、その後に、
新しい変数numに、0か1をランダムに入れているね。
let num = Math.floor(Math.random() * 2);
そして、その数字をquizListという配列の最後に追加しているのが、
quizList.push(num);
だね。その後、配列を変えるだけじゃなくて、配列の変更から画像を変更するために、refleshImages関数を改めて呼んでいる。
6. タイマーを実装しよう
次に、タイマー機能を作っていこう。
フラグ変数(true, falseの変数)がよく使われている。!がnotの意味であることを注意しながら、どうして使われているのか自分で理解しよう。
7.正解不正解のカウントをしよう
次に正解不正解の回数・正答率を表示できるようにしていく。
正解数と不正回数を記録する変数を作る。
不正解の時は、incorrectCountを1増やす。
正解の時もcorrectCountを1増やして、タイマーが終わった時に結果を表示するshowResult関数を呼ぶよ。
正答率などをあらかじめ計算してから、表示するよ。
8. ゲームリセットできるようにしよう
ここまでお疲れ様でした。あとはリセットできるようにしよう。
location.reload();
でサイトをリロードすることができるよ。
つまり、リセットボタンが押されたら、サイトがリロードされるということだね。
あれ、ボタンを押してもリセットされないね。
【TRY】バグを修正しよう
プログラムをきちんと書いたのに動かないことをバグというよ。そして、バグを治すことをデバッグという。
バグには、スペルミスや元々のコードが間違っていたり、そもそもコードが足りていないことがあるよ。
※できるだけ、解答を見ずにやってみよう。
【解答】バグを修正しよう
今回は、関数(function)は準備して、関数の中身も書いていたけど、ボタンと関数を繋いでいなかったのが原因だね。
9. デザインの仕上げをしよう
最後に、CSSを少し追加しよう。
hoverとは、要素の上にマウスが乗っかっている状態のことをいう。
10. 完成
これで完成です。
お疲れ様でした。
11. 解答データ
① 以下のURLにアクセス
https://drive.google.com/drive/folders/1wDrp4Dlu_QsNMby2Sg5jcyvEcbvCGBD4?usp=drive_link
② OXゲーム 解答.zip をダウンロード
12. 次回予告
次回を何にするかはまだ決めていません。
お楽しみに。
coming soon…