第11回

4択クイズを作ろう(正解と点数を出そう)

選択肢を押すと正解・不正解がわかり点数がたまる4択クイズを作る回。配列とmapで選択肢を並べ、stateで点数を管理する方法を小学生向けにやさしく解説します。

·9分で読める
たける
たける つぎはクイズアプリを作ってみたいです!answerをおすと「正解!」って出るやつ。
りこ
りこ 作れるよ。新しいことはほとんどなし。配列+map(第8回)と、条件+state(第9回)の組み合わせだよ。

まずは1問のクイズから

いきなり何問も作らず、まずは1問だけのクイズから始めます。

問題・選択肢・正解を、こう用意します。

const question = '日本の首都はどこ?'
const choices = ['東京', '大阪', '京都', '札幌']
const answer = '東京'

選択肢のボタンは、map(第8回)でならべます。おされたら正解かどうかを調べて、メッセージを変えます。

import { useState } from 'react'

const question = '日本の首都はどこ?'
const choices = ['東京', '大阪', '京都', '札幌']
const answer = '東京'

function Quiz() {
  const [message, setMessage] = useState(question)

  const check = (choice) => {
    if (choice === answer) {
      setMessage('正解!🎉')
    } else {
      setMessage('ざんねん…もう一回!')
    }
  }

  return (
    <div>
      <p>{message}</p>
      {choices.map((c) => (
        <button key={c} onClick={() => check(c)}>{c}</button>
      ))}
    </div>
  )
}
  • choices.map(...) … 選択肢のボタンを自動でならべる(第8回)
  • check(c) … おされた選択肢が answer と同じか調べる(第9回の条件)
  • setMessage(...) … メッセージを書きかえる(画面が自動で変わる)
さいしょ(問題が出ている)

日本の首都はどこ?

「東京」をおしたあと(正解)

正解!🎉

たける
たける ほんとだ、ボタンをならべるのもmapでできた!点数もつけたいです。
りこ
りこ じゃあ点数の state を足そう。正解のときに +1 するだけ。

点数をつける(発展)

点数を覚える score を足して、正解のときに1点ふやします。

import { useState } from 'react'

const question = '日本の首都はどこ?'
const choices = ['東京', '大阪', '京都', '札幌']
const answer = '東京'

function Quiz() {
  const [message, setMessage] = useState(question)
  const [score, setScore] = useState(0)

  const check = (choice) => {
    if (choice === answer) {
      setMessage('正解!🎉')
      setScore(score + 1)
    } else {
      setMessage('ざんねん…もう一回!')
    }
  }

  return (
    <div>
      <p>点数:{score}</p>
      <p>{message}</p>
      {choices.map((c) => (
        <button key={c} onClick={() => check(c)}>{c}</button>
      ))}
    </div>
  )
}
点数つきクイズ(実際の見た目)

点数:1

正解!🎉

やってみよう

StackBlitzで、questionchoicesanswer自分の問題に変えてみましょう。

  • 学校のなぞなぞ
  • すきなアニメクイズ
  • 算数の問題

正解のときに 🎉 の絵文字をふやしたり、不正解のときのメッセージを変えたりしても楽しいです。

まとめ

  • クイズは「配列+map(第8回)」と「条件+state(第9回)」の組み合わせで作れる
  • choices.map(...) で選択肢ボタンを自動でならべる
  • おされた選択肢を answer と比べて、正解か調べる
  • score の state を足せば、点数もつけられる

次の第12回では、コンピュータと対戦するじゃんけんゲームを作ります。勝ち負けの判定に挑戦!