← Taso 2 – Velho

Oppitunti 6/8 ⏱ 40 minuuttia

Tietovisa vierailijoille

Kysymykset, vastaukset ja pisteiden laskenta. Pienoiskoossa opit jokaisen pelin logiikan.

Miten se toimii

Rakennat tietovisan: kysymys, kolme vaihtoehtoa, klikkaa vastataksesi, ja pisteet näkyvät lopussa. Tietovisan data (kysymykset ja vastaukset) asuu objektien taulukossa – kuulostaa hienolta, mutta näet että se on vain siististi järjestetty lista.

Näytän sinulle: tietovisan data

const questions = [
  {
    text: "How many legs does a spider have?",
    choices: ["6", "8", "10"],
    correct: 1,
  },
  {
    text: "Which animal is the fastest?",
    choices: ["cheetah", "falcon", "hare"],
    correct: 1,
  },
  {
    text: "What's the name of our website?",
    choices: ["Code with Martin", "Code with Charlie", "Web with Wendy"],
    correct: 0,
  },
];

Näytän sinulle: tietovisan moottori

HTML:

<div class="card">
  <h2 id="quiz-question"></h2>
  <div id="quiz-choices"></div>
  <p id="quiz-status"></p>
</div>

JavaScript:

const questionEl = document.getElementById("quiz-question");
const choicesEl = document.getElementById("quiz-choices");
const statusEl = document.getElementById("quiz-status");

let questionNumber = 0;
let points = 0;

function showQuestion() {
  const question = questions[questionNumber];
  questionEl.textContent = question.text;
  choicesEl.innerHTML = "";   // clear the old buttons

  question.choices.forEach((choice, index) => {
    const button = document.createElement("button");
    button.textContent = choice;
    button.addEventListener("click", () => answer(index));
    choicesEl.appendChild(button);
  });

  statusEl.textContent = "Question " + (questionNumber + 1) + " of " + questions.length;
}

function answer(index) {
  if (index === questions[questionNumber].correct) {
    points++;
  }

  questionNumber++;

  if (questionNumber < questions.length) {
    showQuestion();
  } else {
    questionEl.textContent = "Done! 🎉";
    choicesEl.innerHTML = "";
    statusEl.textContent = "You scored " + points + " out of " + questions.length + " points.";
  }
}

showQuestion();

Uutta:

Nyt sinun vuorosi 💪

Rakenna tietovisa omilla kysymyksilläsi – vähintään viisi. Projekti-ideoita:

Vaihda vain questions-taulukon sisältö – tietovisan moottori pysyy samana. Siksi data ja logiikka pidetään erillään!

Bonus: värillinen palaute vastauksille

Haluatko oikean vastauksen välähtävän vihreäksi? Säädä answer niin että se värittää painikkeet ensin, sitten näyttää seuraavan kysymyksen sekunnin kuluttua:

function answer(index) {
  const buttons = choicesEl.querySelectorAll("button");
  const correct = questions[questionNumber].correct;

  buttons[correct].style.backgroundColor = "#16a34a";
  if (index !== correct) {
    buttons[index].style.backgroundColor = "#dc2626";
  } else {
    points++;
  }

  setTimeout(() => {
    questionNumber++;
    if (questionNumber < questions.length) {
      showQuestion();
    } else {
      questionEl.textContent = "Done! 🎉";
      choicesEl.innerHTML = "";
      statusEl.textContent = "You scored " + points + " out of " + questions.length + " points.";
    }
  }, 1000);
}

setTimeout(() => {...}, 1000) tarkoittaa “aja tämä 1000 millisekunnin kuluttua.” Ja style.backgroundColor muuttaa CSS:ää suoraan JavaScriptistä.

Tarkista itse: Tietovisa kysyy kysymyksiä peräkkäin, pitää kirjaa pisteistä ja näyttää tuloksen lopussa. Kirjoitit juuri ensimmäisen oikean sovelluksesi – siinä on dataa, logiikkaa ja käyttöliittymä.

Mitä opit tästä oppitunnista