Bagikan melalui


Tutorial: Menambahkan variabel referensi dan kontrol timer ke aplikasi WinForms game yang cocok

Dalam seri empat tutorial ini, Anda membangun permainan mencocokkan, di mana pemain harus mencocokkan pasangan ikon tersembunyi.

Program Game Pencocokan Anda perlu melacak kontrol Label mana yang dipilih oleh pemain. Setelah pemutar memilih label pertama, program akan menampilkan ikon. Setelah label kedua dipilih, program akan menampilkan kedua ikon untuk waktu yang singkat. Kemudian menyembunyikan kedua ikon.

Program Anda melacak Label mana yang Anda pilih terlebih dahulu dan kedua dengan menggunakan variabel referensi . Timer menyembunyikan ikon dan mengontrol berapa lama untuk menampilkan ikon

  • Tambahkan referensi label.
  • Tambahkan timer.

Prasyarat

Tutorial ini dibangun berdasarkan tutorial sebelumnya, Membuat aplikasi game yang cocok dan Tambahkan ikon ke game yang cocok. Selesaikan tutorial tersebut terlebih dahulu.

Tambahkan referensi label

Di bagian ini, Anda akan menambahkan dua variabel referensi ke kode Anda. Mereka memantau, atau merujuk ke objek Label.

  1. Tambahkan referensi label ke formulir Anda dengan menggunakan kode berikut di Form1.cs atau Form1.vb.

    public partial class Form1 : Form
    {
        // firstClicked points to the first Label control 
        // that the player clicks, but it will be null 
        // if the player hasn't clicked a label yet
        Label firstClicked = null;
    
        // secondClicked points to the second Label control 
        // that the player clicks
        Label secondClicked = null;
    

Jika Anda menggunakan C#, letakkan kode setelah kurung kurawal pembuka dan tepat setelah deklarasi kelas (public partial class Form1 : Form). Jika Anda menggunakan Visual Basic, letakkan kode tepat setelah deklarasi kelas (Public Class Form1).

Pernyataan ini tidak menyebabkan kontrol Label muncul pada formulir karena tidak ada kata kunci new. Ketika program dimulai, baik firstClicked maupun secondClicked diatur ke null untuk C# atau Nothing untuk Visual Basic.

  1. Ubah penanganan aktivitas Click Anda di Form1.cs atau Form1.vb untuk menggunakan variabel referensi firstClicked baru. Hapus pernyataan terakhir dalam metode penanganan aktivitas label1_Click() (clickedLabel.ForeColor = Color.Black;) dan ganti dengan pernyataan if sebagai berikut.

    /// <summary>
    /// Every label's Click event is handled by this event handler
    /// </summary>
    /// <param name="sender">The label that was clicked</param>
    /// <param name="e"></param>
    private void label1_Click(object sender, EventArgs e)
    {
        Label clickedLabel = sender as Label;
    
        if (clickedLabel != null)
        {
            // If the clicked label is black, the player clicked
            // an icon that's already been revealed --
            // ignore the click
            if (clickedLabel.ForeColor == Color.Black)
                return;
    
            // If firstClicked is null, this is the first icon 
            // in the pair that the player clicked,
            // so set firstClicked to the label that the player 
            // clicked, change its color to black, and return
            if (firstClicked == null)
            {
                firstClicked = clickedLabel;
                firstClicked.ForeColor = Color.Black;
    
                return;
            }
        }
    }
    

  1. Simpan dan jalankan program Anda. Pilih salah satu kontrol label, dan ikonnya muncul. Pilih kontrol label berikutnya, dan perhatikan bahwa tidak ada yang terjadi.

    Cuplikan layar memperlihatkan Permainan Mencocokkan menampilkan satu ikon.

    Hanya ikon pertama yang dipilih yang muncul. Ikon lainnya tidak terlihat.

Program ini sudah melacak label pertama yang dipilih pemain. Referensi firstClicked tidak null di C# atau Nothing di Visual Basic. Ketika pernyataan if Anda menemukan bahwa firstClicked tidak sama dengan null atau Nothing, pernyataan tersebut akan dijalankan.

Tambahkan timer

Aplikasi Matching Game menggunakan kontrol Timer. Timer menunggu, lalu memicu peristiwa, yang disebut sebagai tanda. Timer dapat memulai tindakan atau mengulangi tindakan secara teratur.

Dalam program Anda, timer memungkinkan pemutar untuk memilih dua ikon. Jika ikon tidak cocok, ikon akan menyembunyikan dua ikon lagi setelah waktu yang singkat.

  1. Pilih tab Kotak Alat, dalam kategori Komponen, klik dua kali atau seret komponen Timer ke formulir Anda. Ikon timer, yang disebut timer1, muncul dalam spasi di bawah formulir.

    Cuplikan layar memperlihatkan ikon timer di bawah formulir.

  2. Pilih ikon Timer1 untuk memilih timer. Di jendela Properti, pilih tombol Properti untuk melihat properti.

  3. Atur properti Interval ke 750, yaitu 750 milidetik.

    Properti Interval memberi tahu timer berapa lama untuk menunggu antara kutu , ketika memicu peristiwa Tick. Program Anda memanggil metode Start() untuk memulai timer setelah pemutar memilih label kedua.

  4. Pilih ikon kontrol timer lalu tekan Enter, atau klik dua kali timer. IDE menambahkan penanganan aktivitas Tick kosong ke Form1.cs atau Form1.vb. Ganti kode dengan kode berikut.

    /// <summary>
    /// This timer is started when the player clicks 
    /// two icons that don't match,
    /// so it counts three quarters of a second 
    /// and then turns itself off and hides both icons
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void timer1_Tick(object sender, EventArgs e)
    {
        // Stop the timer
        timer1.Stop();
    
        // Hide both icons
        firstClicked.ForeColor = firstClicked.BackColor;
        secondClicked.ForeColor = secondClicked.BackColor;
    
        // Reset firstClicked and secondClicked 
        // so the next time a label is
        // clicked, the program knows it's the first click
        firstClicked = null;
        secondClicked = null;
    }
    

Pengelola acara Tick melakukan tiga hal:

  • Ini memastikan timer tidak berjalan dengan memanggil metode Stop().
  • Ini menggunakan dua variabel referensi, firstClicked dan secondClicked, untuk membuat ikon dari dua label yang dipilih pemain tidak terlihat lagi.
  • Ini mengatur ulang variabel referensi firstClicked dan secondClicked ke null di C# dan Nothing di Visual Basic.
  1. Buka editor kode dan tambahkan kode ke bagian atas dan bawah metode penanganan aktivitas label1_Click() di Form1.cs atau Form1.vb. Kode ini akan memeriksa apakah timer diaktifkan, mengatur variabel referensi secondClicked, dan memulai timer. Metode penanganan aktivitas label1_Click() sekarang terlihat sebagai berikut:

    /// <summary>
    /// Every label's Click event is handled by this event handler
    /// </summary>
    /// <param name="sender">The label that was clicked</param>
    /// <param name="e"></param>
    private void label1_Click(object sender, EventArgs e)
    {
        // The timer is only on after two non-matching 
        // icons have been shown to the player, 
        // so ignore any clicks if the timer is running
        if (timer1.Enabled == true)
            return;
    
        Label clickedLabel = sender as Label;
    
        if (clickedLabel != null)
        {
            // If the clicked label is black, the player clicked
            // an icon that's already been revealed --
            // ignore the click
            if (clickedLabel.ForeColor == Color.Black)
                return;
    
            // If firstClicked is null, this is the first icon
            // in the pair that the player clicked, 
            // so set firstClicked to the label that the player 
            // clicked, change its color to black, and return
            if (firstClicked == null)
            {
                firstClicked = clickedLabel;
                firstClicked.ForeColor = Color.Black;
                return;
            }
    
            // If the player gets this far, the timer isn't
            // running and firstClicked isn't null,
            // so this must be the second icon the player clicked
            // Set its color to black
            secondClicked = clickedLabel;
            secondClicked.ForeColor = Color.Black;
    
            // If the player gets this far, the player 
            // clicked two different icons, so start the 
            // timer (which will wait three quarters of 
            // a second, and then hide the icons)
            timer1.Start();
        }
    }
    

  • Kode di bagian atas metode memeriksa apakah timer dimulai dengan memeriksa nilai properti Enabled . Jika pemain memilih kontrol Label pertama dan kedua dan timer dimulai, memilih label ketiga tidak akan berpengaruh.
  • Kode di bagian bawah metode mengatur variabel referensi secondClicked untuk melacak kontrol Label kedua. Kemudian, mengatur warna ikon label tersebut menjadi hitam untuk membuatnya terlihat. Kemudian, ia memulai timer dalam mode satu bidikan, sehingga menunggu 750 milidetik dan kemudian menembakkan satu tanda centang. Penanganan aktivitas Tick timer menyembunyikan dua ikon dan mengatur ulang variabel referensi firstClicked dan secondClicked. Formulir siap bagi pemain untuk memilih sepasang ikon lain.

Nota

Jika Anda menyalin dan menempelkan blok kode label1_Click() daripada memasukkan kode secara manual, pastikan untuk mengganti kode label1_Click() yang ada. Jika tidak, Anda akan berakhir dengan blok kode duplikat.

  1. Simpan dan jalankan program Anda. Pilih persegi dan ikon menjadi terlihat. Pilih kotak lain. Ikon muncul secara singkat lalu kedua ikon menghilang.

Program Anda sekarang melacak ikon pertama dan kedua yang Anda pilih. Ini menggunakan timer untuk menjeda sebelum membuat ikon menghilang.

Langkah berikutnya

Lanjutkan ke tutorial berikutnya untuk mempelajari cara menyelesaikan Game Pencocokan Anda.