Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Dört öğreticiden oluşan bu seride, oyuncunun gizli simge çiftleriyle eşleştiği bir eşleştirme oyunu oluşturursunuz.
Bu öğreticide eşleşen çiftleri görünür durumda tutmak ve bir oyuncu kazandığında tebrik mesajı görüntülemek için Eşleştirme Oyununuzu düzeltin.
Bu öğreticide şunların nasıl yapılacağını öğreneceksiniz:
- Çiftleri görünür tutun.
- Bir oyuncunun kazandığını doğrulayın.
- Diğer özellikleri deneyin.
Önkoşullar
Bu eğitim, şu önceki eğitimlerin üzerine yapılandırılmıştır.
- Eşleşen bir oyun uygulaması oluşturma
- Eşleştirme oyununuza simgeler ekleyin
- Eşleşen oyun zamanlayıcı ekleme
Çiftleri görünür tutma
Bir oyuncu bir çiftle eşleştiğinde, oyun artık firstClicked
ve secondClicked
başvuru değişkenlerini kullanan etiketleri takip etmemesi için kendini sıfırlamalıdır.
Eşleşen iki etiketin renklerini sıfırlamamalıdır.
Bu etiketler görüntülenmeye devam eder.
-
if
olay işleyici yöntemine aşağıdakilabel_Click()
deyimini ekleyin. Zamanlayıcıyı başlattığınız deyiminin hemen üstüne kodun sonuna yakın bir yere yerleştirin.
- C#
- VB
// 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 clicked two matching icons, keep them
// black and reset firstClicked and secondClicked
// so the player can click another icon
if (firstClicked.Text == secondClicked.Text)
{
firstClicked = null;
secondClicked = null;
return;
}
// 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();
}
}
if
deyimi, oynatıcının seçtiği ilk etiketteki simgenin ikinci etiketteki simgeyle aynı olup olmadığını denetler.
Simgeler aynıysa, program üç deyimini çalıştırır.
İlk iki deyim, firstClicked
ve secondClicked
başvuru değişkenlerini sıfırlar.
Artık etiketlerin hiçbirini takip edemezler.
Üçüncü deyim, yöntemindeki diğer deyimleri çalıştırmadan atlayan bir return
deyimidir.
- Programı çalıştırın ve formda kareler seçmeye başlayın.
Uyumsuz bir çift seçerseniz, zamanlayıcının Tick olayı tetiklenir. her iki simge de kaybolur.
Eşleşen bir çift seçerseniz, yeni if
deyimi çalışır.
return deyimi, yönteminin zamanlayıcıyı başlatan kodu atlamasına neden olur.
Simgeler görünür kalır.
Bir oyuncunun kazanıp kazanmadığını doğrula
Eğlenceli bir oyun oluşturdunuz. Bir oyuncu kazandıktan sonra oyun bitmelidir. Bu bölüm, oyuncunun kazanıp kazanmadığını doğrulamak için bir yöntem ekler.
- Kodunuzun en altına
CheckForWinner()
olay işleyicisinin altına birtimer1_Tick()
yöntemi ekleyin.
- C#
- VB
/// <summary>
/// Check every icon to see if it is matched, by
/// comparing its foreground color to its background color.
/// If all of the icons are matched, the player wins
/// </summary>
private void CheckForWinner()
{
// Go through all of the labels in the TableLayoutPanel,
// checking each one to see if its icon is matched
foreach (Control control in tableLayoutPanel1.Controls)
{
Label iconLabel = control as Label;
if (iconLabel != null)
{
if (iconLabel.ForeColor == iconLabel.BackColor)
return;
}
}
// If the loop didn’t return, it didn't find
// any unmatched icons
// That means the user won. Show a message and close the form
MessageBox.Show("You matched all the icons!", "Congratulations");
Close();
}
yöntemi, foreach
içindeki her etiketin üzerinden geçmek için C# dilinde başka bir For Each
döngüsü veya Visual Basic'te TableLayoutPanel döngüsü kullanır.
Arka planla eşleşip eşleşmediğini doğrulamak için her etiketin simge rengini denetler.
Renkler eşleşirse simge görünmez durumda kalır ve oyuncu kalan simgelerin tümünü eşleştirmemiştir.
Bu durumda, program yöntemin geri kalanını atlamak için bir return
deyimi kullanır.
Döngü, return
deyimini yürütmeden tüm etiketlerden geçerse, formdaki tüm simgelerin eşleştirildiği anlamına gelir.
Program, oyuncuyu kazandığı için tebrik etmek için bir MessageBox gösterir ve ardından oyunu sonlandırmak için Close()
yöntemini çağırır.
- Etiketin Click olay işleyicisinin yeni
CheckForWinner()
yöntemini çağırmasını sağlayın.
- C#
- VB
// 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;
// Check to see if the player won
CheckForWinner();
// If the player clicked two matching icons, keep them
// black and reset firstClicked and secondClicked
// so the player can click another icon
if (firstClicked.Text == secondClicked.Text)
{
firstClicked = null;
secondClicked = null;
return;
}
Programınızın, oyuncunun seçtiği ikinci simgeyi gösterdikten hemen sonra kazananı denetlediğinden emin olun. Seçilen ikinci simgenin rengini ayarladığınız satırı bulun ve ardından bu çizgiden hemen sonra CheckForWinner()
yöntemini çağırın.
Programı kaydedin ve çalıştırın. Oyunu oynayın ve tüm simgeleri eşleştirin. Kazandığınızda, program bir tebrik iletisi görüntüler.
Tamamseçtikten sonra, Eşleşen Oyun kapanır.
Diğer özellikleri deneyin
Eşleştirme Oyununuz tamamlandı. Bu oyunu daha zorlu ve ilginç hale getirmek için daha fazla özellik ekleyebilirsiniz. Bazı seçenekler aşağıdadır.
Simgeleri ve renkleri seçtiklerinizle değiştirin.
Etiketin ForeColor özelliğine bakmayı deneyin.
Oyuncunun kazanmasının ne kadar sürdüğünü izleyen bir oyun zamanlayıcı ekleyin.
Formda geçen süreyi görüntülemek için bir etiket ekleyebilirsiniz. TableLayoutPanelüzerine yerleştirin. Saati izlemek için forma başka bir zamanlayıcı ekleyin. Oyuncu oyunu başlattığında zamanlayıcıyı başlatmak için kodu kullanın ve son iki simgeyi eşleştirdikten sonra zamanlayıcıyı durdurun.
Oyuncu bir eşleşme bulduğunda bir ses, eşleşmeyen iki simgeyi ortaya çıkardığında başka bir ses ve program simgeleri yeniden gizlediğinde üçüncü bir ses ekleyin.
Sesleri çalmak için System.Media ad alanını kullanabilirsiniz. Daha fazla bilgi için bkz. Windows Forms uygulamasında ses çalma (C#) veya Visual Basic'da ses çalma.
Tahtayı büyüterek oyunu daha zor hale getirin.
TableLayoutPanel'e satır ve sütun eklemekten fazlasını yapmanız gerekir. Oluşturduğunuz simgelerin sayısını da göz önünde bulundurmanız gerekir.
Oyuncu yanıt veremeyecek kadar yavaşsa ilk simgeyi gizleyerek oyunu daha zorlu hale getirin.
Sonraki adımlar
Tebrikler! Bu eğitim dizisini tamamladınız. Visual Studio IDE'de şu programlama ve tasarım görevlerini gerçekleştirdiniz:
- Listede simgeler gibi depolanan nesneler
- Listede yineleme yapmak için C# veya Visual Basic'te döngü kullandım
- Başvuru değişkenlerini kullanarak durumu takip etme
- Birden çok nesnenin olaylarına yanıt vermek için bir olay işleyicisi oluşturuldu
- Geri sayan ve bir olayı tetikleyen bir zamanlayıcı eklendi
Windows Forms Tasarımcısı'na ayrıntılı bir bakış için bu makaleye ilerleyin.