Aracılığıyla paylaş


Öğretici: Eşleşen oyun WinForms uygulamanıza başvuru değişkenleri ve zamanlayıcı denetimi ekleme

Dört öğreticiden oluşan bu seride, oyuncunun gizli simge çiftleriyle eşleştiği bir eşleştirme oyunu oluşturursunuz.

Eşleşen Oyun programınızın, oyuncunun hangi Etiket denetimini seçtiğini izlemesi gerekir. Bir oyuncu ilk etiketi seçtikten sonra, program simgeyi göstermelidir. İkinci etiket seçildikten sonra, program kısa bir süre için her iki simgeyi de görüntülemelidir. Ardından iki simgeyi de gizler.

Programınız, ilk ve ikinci seçtiğiniz Etiketi, başvuru değişkenlerini kullanarak izler. Zamanlayıcı simgeleri gizler ve simgelerin ne kadar süre göstereceğini denetler

  • Etiket referansları ekleyin.
  • Zamanlayıcı ekleyin.

Önkoşullar

Bu öğretici önceki öğreticiler, Eşleşen bir oyun uygulaması oluşturma ve eşleşen oyunsimgeleri ekleme konularını temel alır. Önce bu dersleri tamamlayın.

Etiket referansları ekle

Bu bölümde, kodunuza iki başvuru değişkeni ekleyeceksiniz. Etiket nesnelerini takip eder veya onlara başvurur.

  1. "Form1.cs veya Form1.vbiçinde aşağıdaki kodu kullanarak formunuza etiket başvuruları ekleyin."

    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;
    

C# kullanıyorsanız, kodu küme ayracı açmadan sonra ve sınıf bildiriminden hemen sonra (public partial class Form1 : Form) koyun. Visual Basic kullanıyorsanız, kodu sınıf bildiriminden hemen sonra yerleştirin (Public Class Form1).

new anahtar sözcüğü olmadığından bu deyimler Formda Etiket denetimlerinin görünmesine neden olmaz. Program başlatıldığında hem firstClicked hem de secondClicked C# için null veya Visual Basic için Nothing olarak ayarlanır.

  1. yeni Click başvuru değişkenini kullanmak için Form1.cs veya Form1.vbfirstClicked olay işleyicinizi değiştirin. label1_Click() olay işleyici yöntemindeki (clickedLabel.ForeColor = Color.Black;) son deyimini kaldırın ve aşağıdaki gibi if deyimiyle değiştirin.

    /// <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. Programınızı kaydedin ve çalıştırın. Etiket denetimlerinden birini seçtiğinizde simgesi görüntülenir. Sonraki etiket denetimini seçin ve hiçbir şey olmadığını fark edeceksiniz.

    Bir simgeyi gösteren Eşleştirme Oyunu ekran görüntüsü.

    Yalnızca seçilen ilk simge görüntülenir. Diğer simgeler görünmez.

Program zaten oyuncunun seçtiği ilk etiketi takip ediyor. Referans firstClicked C# içinde null veya Visual Basic içinde Nothing değildir. if deyiminiz firstClickednull veya Nothingeşit olmadığını bulduğunda deyimleri çalıştırır.

Zamanlayıcı ekleme

Matching Game uygulaması bir Timer denetimi kullanır. Zamanlayıcı bekler ve ardından tikolarak adlandırılan bir olayı tetikler. Zamanlayıcı bir eylemi başlatabilir veya bir eylemi düzenli olarak yineleyebilir.

Programınızda zamanlayıcı, bir oyuncunun iki simge seçmesini sağlar. Simgeler eşleşmiyorsa, kısa bir süre sonra iki simgeyi yeniden gizler.

  1. Araç Kutusu sekmesini seçin, Bileşenler kategorisinde Zamanlayıcı bileşenine çift tıklayın veya formunuza sürükleyin. süreölçer1 olarak adlandırılan zamanlayıcı simgesi, formun altındaki bir alanda görünür.

    Ekran görüntüsü formun altındaki zamanlayıcı simgesini gösterir.

  2. Zamanlayıcıyı seçmek için Timer1 simgesini seçin. özellikleri görüntülemek için Özellikler penceresinde Özellikler düğmesini seçin.

  3. Interval özelliğini 750 milisaniye olan 750olarak ayarlayın.

    Aralığı özelliği, zamanlayıcıya olayını tetiklediğinde Tickarasında ne kadar bekleyeceğini bildirir. Programınız, oynatıcı ikinci etiketi seçtikten sonra zamanlayıcıyı başlatmak için Start() yöntemini çağırır.

  4. Zamanlayıcı denetimi simgesini seçin ve Entertuşuna basın veya zamanlayıcıya çift tıklayın. IDE, Form1.cs veya Form1.vbiçin boş bir Tick olay işleyicisi ekler. Kodu aşağıdaki kodla değiştirin.

    /// <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;
    }
    

Tick olay işleyicisi üç şey yapar:

  • Stop() yöntemini çağırarak zamanlayıcının çalışmamasını sağlar.
  • Oyuncunun seçtiği iki etiketin simgelerini yeniden görünmez hale getirmek için firstClicked ve secondClickedolmak üzere iki başvuru değişkeni kullanır.
  • firstClicked ve secondClicked başvuru değişkenlerini C# dilinde null ve Visual Basic'te Nothing olarak sıfırlar.
  1. Kod düzenleyicisine gidin ve label1_Click() veya Form1.csForm1.vb olay işleyicisi yönteminin en üstüne ve altına kod ekleyin. Bu kod zamanlayıcının etkinleştirilip etkinleştirilmediğini denetler, secondClicked başvuru değişkenini ayarlar ve zamanlayıcıyı başlatır. label1_Click() olay işleyici yöntemi şimdi aşağıdaki gibi görünür:

    /// <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();
        }
    }
    

  • Yöntemin en üstündeki kod, Enabled özelliğinin değerini denetleyerek zamanlayıcının başlatılıp başlatılmadığını denetler. Oynatıcı birinci ve ikinci Etiket denetimlerini seçerse ve zamanlayıcı başlatılırsa, üçüncü bir etiket seçmek hiçbir şey yapmaz.
  • Yöntemin en altındaki kod, ikinci Etiket denetimini izlemek için secondClicked başvuru değişkenini ayarlar. Ardından, bu etiket simgesinin rengini görünür hale getirmek için siyah olarak ayarlar. Ardından, zamanlayıcıyı tek seferlik modda başlatır, böylece 750 milisaniye bekler ve ardından tek bir tik oluşturur. Zamanlayıcının Tick olay işleyicisi iki simgeyi gizler ve firstClicked ve secondClicked başvuru değişkenlerini sıfırlar. Form, oyuncunun başka bir simge çifti seçmesi için hazırdır.

Not

Kodu el ile girmek yerine label1_Click() kod bloğunu kopyalayıp yapıştırırsanız, var olan label1_Click() kodunu değiştirmeyi unutmayın. Aksi takdirde, yinelenen bir kod bloğuyla karşınıza çıkar.

  1. Programınızı kaydedin ve çalıştırın. Bir kare seçtiğinizde simge görünür hale gelir. Başka bir kare seçin. Simge kısa bir süre görüntülenir ve her iki simge de kaybolur.

Programınız artık seçtiğiniz birinci ve ikinci simgeleri izler. Simgelerin kaybolmasına neden olmadan önce duraklatmak için zamanlayıcıyı kullanır.

Sonraki adımlar

Eşleştirme Oyununuzu nasıl bitireceğinizi öğrenmek için sonraki öğreticiye geçin.