Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dalam rangkaian empat tutorial ini, Anda akan membangun kuis matematika. Kuis berisi empat masalah matematika acak yang coba dijawab oleh pengamat kuis dalam waktu tertentu.
Kuis menggunakan kontrol Timer. Kode di balik kontrol ini melacak waktu yang berlalu dan memeriksa jawaban pengadil kuis.
Dalam tutorial ketiga ini, Anda mempelajari cara:
- Tambahkan kontrol Timer ke aplikasi Windows Forms Anda.
- Tambahkan penanganan aktivitas untuk Timer.
- Tulis kode untuk memeriksa jawaban pengguna, menampilkan pesan, dan mengisi jawaban yang benar.
Prasyarat
Tutorial ini dibangun pada tutorial sebelumnya, dimulai dengan Membuat aplikasi WinForms kuis matematika. Jika Anda belum menyelesaikan tutorial tersebut, lakukan terlebih dahulu.
Menambahkan timer hitung mundur
Untuk melacak waktu selama kuis, Anda menggunakan komponen Timer. Anda juga memerlukan variabel untuk menyimpan jumlah waktu yang tersisa.
Tambahkan variabel bilangan bulat yang diberi nama timeLeft dengan cara yang sama seperti Anda mendeklarasikan variabel dalam tutorial sebelumnya. Letakkan deklarasi timeLeft tepat setelah deklarasi lainnya. Kode Anda akan terlihat seperti sampel berikut.
public partial class Form1 : Form { // Create a Random object called randomizer // to generate random numbers. Random randomizer = new Random(); // These integer variables store the numbers // for the addition problem. int addend1; int addend2; // These integer variables store the numbers // for the subtraction problem. int minuend; int subtrahend; // These integer variables store the numbers // for the multiplication problem. int multiplicand; int multiplier; // These integer variables store the numbers // for the division problem. int dividend; int divisor; // This integer variable keeps track of the // remaining time. int timeLeft;
Di Windows Forms Designer, pindahkan kontrol Timer dari komponen kategori kotak alat ke formulir Anda. Kontrol muncul di area abu-abu di bagian bawah jendela perancangan.
Pada formulir, pilih ikon Timer yang baru saja Anda tambahkan, dan atur properti Interval ke 1000. Karena interval ini dalam milidetik, nilai 1000 menyebabkan timer menaikkan peristiwa Tick setiap detik.
Periksa jawabannya
Karena timer mengaktifkan event Tick setiap detik, masuk akal untuk memeriksa waktu yang berlalu dalam penanganan event Tick. Ini juga praktis untuk memeriksa jawaban di pengendali peristiwa tersebut. Jika waktu telah habis, atau jika jawabannya benar, kuis akan berakhir.
Sebelum Anda menulis penanganan aktivitas tersebut, tambahkan metode yang disebut CheckTheAnswer() untuk menentukan apakah jawaban atas masalah matematika sudah benar. Metode ini harus sejalan dengan metode lain, seperti StartTheQuiz(). Kode Anda akan terlihat seperti sampel berikut.
/// <summary>
/// Check the answers to see if the user got everything right.
/// </summary>
/// <returns>True if the answer's correct, false otherwise.</returns>
private bool CheckTheAnswer()
{
if ((addend1 + addend2 == sum.Value)
&& (minuend - subtrahend == difference.Value)
&& (multiplicand * multiplier == product.Value)
&& (dividend / divisor == quotient.Value))
return true;
else
return false;
}
Metode ini menentukan jawaban atas masalah matematika dan membandingkan hasilnya dengan nilai dalam kontrol NumericUpDown. Dalam kode ini:
Versi Visual Basic menggunakan kata kunci
Functionalih-alih kata kunciSubbiasa karena metode ini mengembalikan nilai.Anda tidak dapat dengan mudah memasukkan tanda perkalian (×) atau tanda pembagian (÷) dengan menggunakan keyboard, sehingga C# dan Visual Basic menerima tanda bintang (
*) untuk perkalian dan tanda garis miring (/) untuk pembagian.Di C#,
&&adalah operatorlogical and. Di Visual Basic, operator yang setara adalahAndAlso. Anda menggunakan operatorlogical anduntuk memeriksa apakah lebih dari satu kondisi benar. Dalam hal ini, jika nilai semuanya benar, metode mengembalikan nilaitrue. Jika tidak, metode mengembalikan nilaifalse.Pernyataan
ifmenggunakan properti Nilai dari kontrol NumericUpDown untuk mengakses nilai kontrol saat ini. Di bagian berikutnya, Anda menggunakan properti yang sama untuk menampilkan jawaban yang benar di setiap kontrol.
Tambahkan pengendali acara ke timer
Sekarang setelah Anda memiliki cara untuk memeriksa jawabannya, Anda dapat menulis kode untuk penanganan aktivitas Tick. Kode ini berjalan setiap detik, setelah timer menghasilkan peristiwa Tick. Penanganan kejadian ini memeriksa jawaban peserta kuis dengan memanggil CheckTheAnswer(). Ini juga memeriksa berapa banyak waktu yang telah berlalu dalam kuis.
Pada formulir, klik dua kali kontrol Timer, atau pilih dan kemudian pilih Masukkan. Tindakan ini menambahkan penanganan aktivitas Tick. Editor kode muncul dan menampilkan metode dari handler Tick.
Untuk C#, ini menambahkan baris kode dalam file kode Form1.Designer.cs yang menghubungkan penanganan aktivitas:
timer1.Tick += new EventHandler(timer1_Tick);Untuk Visual Basic, tidak perlu baris tersebut, tetapi penanganan aktivitas berisi
handles Timer1.Tickyang melakukan hal yang sama.Tambahkan pernyataan berikut ke metode penanganan aktivitas baru.
private void timer1_Tick(object sender, EventArgs e) { if (CheckTheAnswer()) { // If CheckTheAnswer() returns true, then the user // got the answer right. Stop the timer // and show a MessageBox. timer1.Stop(); MessageBox.Show("You got all the answers right!", "Congratulations!"); startButton.Enabled = true; } else if (timeLeft > 0) { // If CheckTheAnswer() returns false, keep counting // down. Decrease the time left by one second and // display the new time left by updating the // Time Left label. timeLeft = timeLeft - 1; timeLabel.Text = timeLeft + " seconds"; } else { // If the user ran out of time, stop the timer, show // a MessageBox, and fill in the answers. timer1.Stop(); timeLabel.Text = "Time's up!"; MessageBox.Show("You didn't finish in time.", "Sorry!"); sum.Value = addend1 + addend2; difference.Value = minuend - subtrahend; product.Value = multiplicand * multiplier; quotient.Value = dividend / divisor; startButton.Enabled = true; } }
Setiap detik dari kuis, metode ini berjalan. Kode pertama-tama memeriksa nilai yang CheckTheAnswer() kembalikan.
Jika semua jawaban benar, nilai tersebut
true, dan kuis berakhir:- Timer berhenti.
- Pesan selamat muncul.
- Properti Diaktifkan dari kontrol startButton diatur ke
truesehingga pengaju kuis dapat memulai kuis lain.
Jika
CheckTheAnswer()mengembalikanfalse, kode akan memeriksa nilai timeLeft:- Jika variabel ini lebih besar dari 0, timer mengurangi 1 dari timeLeft. Ini juga memperbarui properti Teks dari kontrol timeLabel untuk menampilkan pengalih kuis berapa detik yang tersisa.
- Jika tidak ada waktu yang tersisa, penghitung waktu akan berhenti dan mengubah teks timeLabel menjadi Waktu Habis!. Kotak pesan mengumumkan bahwa kuis sudah berakhir, dan jawabannya terungkap. Tombol mulai menjadi tersedia lagi.
Mulai penghitung waktu
Untuk memulai timer saat kuis dimulai, tambahkan tiga baris ke akhir metode StartTheQuiz(), seperti yang ditunjukkan sampel berikut.
/// <summary>
/// Start the quiz by filling in all of the problem
/// values and starting the timer.
/// </summary>
public void StartTheQuiz()
{
// Fill in the addition problem.
// Generate two random numbers to add.
// Store the values in the variables 'addend1' and 'addend2'.
addend1 = randomizer.Next(51);
addend2 = randomizer.Next(51);
// Convert the two randomly generated numbers
// into strings so that they can be displayed
// in the label controls.
plusLeftLabel.Text = addend1.ToString();
plusRightLabel.Text = addend2.ToString();
// 'sum' is the name of the NumericUpDown control.
// This step makes sure its value is zero before
// adding any values to it.
sum.Value = 0;
// Fill in the subtraction problem.
minuend = randomizer.Next(1, 101);
subtrahend = randomizer.Next(1, minuend);
minusLeftLabel.Text = minuend.ToString();
minusRightLabel.Text = subtrahend.ToString();
difference.Value = 0;
// Fill in the multiplication problem.
multiplicand = randomizer.Next(2, 11);
multiplier = randomizer.Next(2, 11);
timesLeftLabel.Text = multiplicand.ToString();
timesRightLabel.Text = multiplier.ToString();
product.Value = 0;
// Fill in the division problem.
divisor = randomizer.Next(2, 11);
int temporaryQuotient = randomizer.Next(2, 11);
dividend = divisor * temporaryQuotient;
dividedLeftLabel.Text = dividend.ToString();
dividedRightLabel.Text = divisor.ToString();
quotient.Value = 0;
// Start the timer.
timeLeft = 30;
timeLabel.Text = "30 seconds";
timer1.Start();
}
Saat kuis Anda dimulai, kode ini mengatur variabel timeLeft menjadi 30 dan properti Text dari kontrol timeLabel menjadi 30 detik. Kemudian metode Start() kontrol Timer memulai hitung mundur.
Jalankan aplikasi Anda
Simpan program Anda dan jalankan.
Pilih Mulaikuis . Timer mulai menghitung mundur. Ketika waktu habis, kuis berakhir, dan jawabannya muncul.
Mulai kuis lain, dan berikan jawaban yang benar untuk masalah matematika. Saat Anda menjawab dengan benar dalam batas waktu, kotak pesan terbuka, tombol mulai tersedia, dan timer berhenti.
Langkah berikutnya
Lanjutkan ke tutorial berikutnya untuk mempelajari cara menyesuaikan kuis matematika Anda.