JavaScriptでクイズを作ろう!

今回はYouTubeを見て勉強しました。

セイト先生のWeb・ITエンジニア転職ラボ

【JavaScript超入門講座】基礎文法だけでクイズゲームのアプリを開発!

セイト先生の動画を見て古語の問題クイズを作りました。

リファクタリングについて、とても丁寧に説明してあったのですが

勉強不足の自分は少し迷子になり、焦りました!

セイト先生ありがとう。

今回の成果物はコチラ

index.html

動画ではBootstrapの使い方も教えてくれます。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title></title>
  <meta name="description" content="">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  
  <link rel="manifest" href="site.webmanifest">
  <link rel="apple-touch-icon" href="icon.png">
  <!-- Place favicon.ico in the root directory -->
  
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">  
  <meta name="theme-color" content="#fafafa">
  <link rel="stylesheet" href="stylesheet2.css">
</head>

<body>

  <div class = "pic">
    <img src="sikibu.png" alt = "式部ちゃん" width="350px"  >
  </div>

  <div class = "container">

      <div id = "js-question" class = "mt-3 alert alert-primary" role = "alert">
        A simple primary alert-check it out!
      </div>

    <div class = "d-flex justify-content-center">
      <button type="button" class="btn btn-primary">Primary</button>
      <button type="button" class="ml-1 btn btn-primary">Primary</button>
      <button type="button" class="ml-1 btn btn-primary">Primary</button>
      <button type="button" class="ml-1 btn btn-primary">Primary</button>
    </div>

  </div>
  <script src="app.js"></script>
</body>
</html>

app.js

問題の数を増やして、最後は得点を表示するようにしました。

'use strict';

const $button = document.getElementsByTagName('button');
const length = $button.length;

const quiz =[
  // 1
  {
  question: 'すまふ',
  ansers :["住む",
           "抵抗する",
           "囲う",
           "謝る",],
  anser :  "抵抗する" ,      
  },
// 2
  {
  question: 'めざまし',
  ansers :["気にくわない",
           "著しい",
           "きわだっている",
           "目が覚める",],
  anser :  "気にくわない" , 
  },
// 3
  {
  question: 'ゆくりなし',
  ansers :["騒々しい",
           "突然だ",
           "うっとうしい",
           "忙しい",],
  anser :  "突然だ" , 
  },
// 4
  {
  question: 'なめげなり',
  ansers :["泣いている",
           "無理矢理だ",
           "いい加減だ",
           "無礼だ",],
  anser :  "無礼だ" , 
  },
// 5
  {
  question: 'まめやかなり',
  ansers :["真面目だ",
           "小心者だ",
           "穏やかだ",
           "怪しげだ",],
  anser :  "真面目だ" , 
  },
  // 6
  {
  question: 'まばゆし',
  ansers :["美しい",
           "輝いている",
           "恥ずかしい",
           "羨ましい",],
  anser :  "恥ずかしい" , 
  },
  // 7
  {
  question: 'まさなし',
  ansers :["うそつき",
           "難しい",
           "つまらない",
           "よくない",],
  anser :  "よくない" , 
  },
  // 8
  {
  question: 'いつしか',
  ansers :["そのうちに",
           "早くも",
           "いつの間にか",
           "いずれは",],
  anser :  "早くも" , 
  },
  // 9
  {
  question: 'あてなり',
  ansers :["身分が高い",
           "間違いだ",
           "適当である",
           "その人物だ",],
  anser :  "身分が高い" , 
  },
  // 10
  {
  question: 'おほとのごもる',
  ansers :["遊びにいく",
           "演奏なさる",
           "おやすみになる",
           "食事をする",],
  anser :  "おやすみになる" , 
  },
  
];

const quizLength = quiz.length;
let quizIndex = 0;
let score = 0;

const setupQuiz = () => {
  document.getElementById('js-question').textContent = quiz[quizIndex].question;
  let buttonIndex = 0;
  while(buttonIndex < length){
    $button[buttonIndex].textContent = quiz[quizIndex].ansers[buttonIndex];
    buttonIndex++;
  }
}

setupQuiz();

const clickHandler = (e) => {
  if(quiz[quizIndex].anser === e.target.textContent){
    window.alert("正解です!");
    score++;
  } else {
    window.alert("不正解です!");
  }
  
  quizIndex++;

  if(quizIndex < quizLength) {
      setupQuiz();
  } else {
      window.alert(`"これでおしましいです!あなたのスコアは${score*10}点です"`);
  }
};


let handlerIndex = 0;
while(handlerIndex < length){
  $button[handlerIndex].addEventListener('click',(e)=>{
    clickHandler(e);
  });
  handlerIndex++;
};

stylesheet.css

スマホ用にしたかったので、cssでレスポンシブル対応にしてみました。

PCと両立するのが難しいです・・・。

@media (max-width: 670px) {
  body {    
    margin-top: 10px;
    font-family: Verdana,sans-serif;
    background-color: rgb(121, 153, 196);
  }    
.pic {
  text-align: center;
 }
}

動画を見ながら半日かけて仕上げました。

出来た時は理解できた気がしたのですが

動画なしで、もう一度作れと言われたら絶対無理ですね。

まだまだ勉強足りないです。

最後に最近少し使えるようになってきた

Githubをリンクさせて下さい。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA