Melanjutkan Math Game sebelumnya, kini kita akan memeriksa apakah jawaban pemain benar atau salah, serta menghitung dan menampilkan skor akhir. Bagian ini agak kompleks karena melibatkan beberapa variabel yang saling terhubung, jadi ikuti setiap langkah dengan cermat.
Soal seperti “What is 2 plus 3?” dibuat menggunakan pick random, namun begitu ditampilkan, nilai acak tersebut langsung hilang dan tidak bisa dipanggil lagi untuk menghitung jawaban yang benar. Solusinya: simpan setiap angka acak ke dalam variabel sebelum digunakan, agar bisa dipakai kembali nanti untuk verifikasi.
Buat dua variabel baru: Number1 dan Number2. Alih-alih langsung menampilkan pick random di dalam soal, simpan dulu nilainya:
when I receive [question]
set [Question] to (answer)
repeat (Question)
set [Number1] to (pick random 1 to 10)
set [Number2] to (pick random 1 to 10)
if <(Choice) = 1> then
ask (join (join (join "What is" (Number1)) "plus") (Number2)) and wait
broadcast [plus] and wait
else
ask (join (join (join "What is" (Number1)) "multiply by") (Number2)) and wait
broadcast [multiply] and wait
Dengan menyimpan angka ke Number1 dan Number2 terlebih dahulu, nilai tersebut tetap tersedia untuk dipakai memeriksa jawaban nanti, meskipun soal sudah ditampilkan di layar. Perhatikan juga broadcast _ and wait digunakan (bukan broadcast biasa) agar proses pengecekan jawaban benar-benar selesai sebelum melanjutkan ke pengulangan berikutnya.
Karena blok answer akan berubah nilai setiap kali pemain menjawab soal (menimpa jumlah soal yang diminta di awal), buat variabel baru Question untuk menyimpan jumlah total soal secara permanen (seperti terlihat pada skrip di atas: set Question to (answer) dilakukan tepat setelah menerima jumlah soal, sebelum nilainya berubah lagi).
when I receive [plus]
if <(answer) = ((Number1) + (Number2))> then
change [Score] by 1
say "Correct answer" for 3 seconds
else
say "Incorrect answer" for 3 seconds
Skrip ini membandingkan jawaban pemain (answer) dengan hasil sebenarnya, yaitu Number1 + Number2 (dihitung menggunakan operator +). Jika sama, skor bertambah 1 dan pesan “Correct answer” ditampilkan; jika tidak, pesan “Incorrect answer” yang muncul.
when I receive [multiply]
if <(answer) = ((Number1) × (Number2))> then
change [Score] by 1
say "Correct answer" for 3 seconds
else
say "Incorrect answer" for 3 seconds
Logikanya sama persis dengan penjumlahan, hanya operatornya diganti menjadi × (perkalian).
Tips: beri komentar pada masing-masing skrip (klik kanan pada blok → Add Comment) seperti “Checking answer for addition” dan “Checking answer for multiplication” agar kode lebih mudah dipahami saat dibaca ulang nanti.
Tambahkan set Score to 0 di titik awal permainan (skrip yang menerima pesan start), agar skor selalu mulai dari 0 setiap kali permainan dimulai ulang.
Di akhir loop repeat (setelah semua soal selesai dijawab), tambahkan blok untuk menampilkan hasil akhir:
say (join (join (join "Your score is" (Score)) "/") (Question)) for 3 seconds
Sama seperti menyusun soal, teks skor akhir juga disusun menggunakan join bertingkat, menggabungkan teks “Your score is”, nilai Score, tanda “/”, dan nilai Question (total soal) — menghasilkan tampilan seperti “Your score is 2/3”.
when [green flag] clicked
broadcast [start]
when I receive [start]
set [Score] to 0
ask "What's your name? Press 1 for Add. Press 2 for Multiply." and wait
set [Choice] to (answer)
if <<(Choice) = 1> or <(Choice) = 2>> then
ask "How many questions do you want?" and wait
set [Question] to (answer)
broadcast [question]
else
say "Incorrect choice" for 2 seconds
broadcast [start]
when I receive [question]
repeat (Question)
set [Number1] to (pick random 1 to 10)
set [Number2] to (pick random 1 to 10)
if <(Choice) = 1> then
ask (join (join (join "What is" (Number1)) "plus") (Number2)) and wait
broadcast [plus] and wait
else
ask (join (join (join "What is" (Number1)) "multiply by") (Number2)) and wait
broadcast [multiply] and wait
say (join (join (join "Your score is" (Score)) "/") (Question)) for 3 seconds
when I receive [plus]
if <(answer) = ((Number1) + (Number2))> then
change [Score] by 1
say "Correct answer" for 3 seconds
else
say "Incorrect answer" for 3 seconds
when I receive [multiply]
if <(answer) = ((Number1) × (Number2))> then
change [Score] by 1
say "Correct answer" for 3 seconds
else
say "Incorrect answer" for 3 seconds
Logika inti Math Game ini menunjukkan konsep penting: nilai sementara (seperti hasil pick random atau answer) harus disimpan ke variabel jika masih dibutuhkan nanti, karena nilai-nilai tersebut akan tertimpa atau hilang begitu event berikutnya dijalankan. Kombinasi broadcast ... and wait, repeat, variabel penyimpan (Number1, Number2, Choice, Question), dan join bertingkat menjadi fondasi utama game kuis ini.
Pada tutorial berikutnya, kita akan menambahkan tombol Restart agar pemain bisa memulai ulang permainan dengan mudah tanpa perlu mengklik green flag lagi.