2016-03-30 13 views
0

olduğunda bir uyarıyı tetikler Benim okul projem için bir hafıza oyunu oluşturuyorum ve oyuncu oyunu kazandığında ve bir notu görüntülediğinde bir mesaj kutusu tetiklemede sorun yaşıyorum "Tüm kartlarla eşleştiniz! ". Çözüme sahip olan var mı? kodC# Tüm resimlerin bir değeri

Bir kısmı:

private void Card1_Click(object sender, EventArgs e) 
{ 
    Card1.Image = Properties.Resources.car1; 
    if(usedCard1 == null) 
    { 
     usedCard1 = Card1; 
    } 
    else if(usedCard1 != null && usedCard2 == null) 
    { 
     usedCard2 = Card1; 
    } 
    if(usedCard1 != null && usedCard2 != null) 
    { 
     if(usedCard1.Tag == usedCard2.Tag) 
     { 
      usedCard1 = null; 
      usedCard2 = null; 
      Card1.Enabled = false; 
      Dupcard1.Enabled = false; 
      points = Convert.ToInt32(ScoreCounter.Text); 
      points = points + 10; 
      ScoreCounter.Text = Convert.ToString(points); 
     } 
     else 
     { 
      points = Convert.ToInt32(ScoreCounter.Text); 
      points = points - 10; 
      ScoreCounter.Text = Convert.ToString(points); 
      timer4.Start(); 
     } 
    } 
} 

private void Dupcard1_Click(object sender, EventArgs e) 
{ 
    Dupcard1.Image = Properties.Resources.car1; 
    if (usedCard1 == null) 
    { 
     usedCard1 = Dupcard1; 
    } 
    else if (usedCard1 != null && usedCard2 == null) 
    { 
     usedCard2 = Dupcard1; 
    } 
    if (usedCard1 != null && usedCard2 != null) 
    { 
     if (usedCard1.Tag == usedCard2.Tag) 
     { 
       usedCard1 = null; 
       usedCard2 = null; 
       Card1.Enabled = false; 
       Dupcard1.Enabled = false; 
       points = Convert.ToInt32(ScoreCounter.Text); 
       points = points + 10; 
       ScoreCounter.Text = Convert.ToString(points); 
     } 
     else 
     { 
       points = Convert.ToInt32(ScoreCounter.Text); 
       points = points - 10; 
       ScoreCounter.Text = Convert.ToString(points); 
       timer4.Start(); 
     } 
    } 
} 

private void Win() 
{ 
    foreach(PictureBox picture in cardsHolder.Controls) 
    { 
     if(picture != null) 
     { 

     } 
    } 
    MessageBox.Show("You've matched all cards", "Congratulations"); 
    Close(); 
} 

PS: cardsHolder panelinin adıdır ve kazanın oyuncu oyunu kazanır iletiyi tetikleme yöntemidir.

+0

Hangi kartların eşleştirildiğini nasıl takip edersiniz? – Jens

+0

@Robin Oyunun kurallarını gönderebilir misiniz, böylece neye ihtiyacınız olduğunu daha iyi anlayabilir miyim? –

cevap

1

PictureBox'da bir görüntüyü göstermiyorsanız, PictureBox.Image özelliğini null olarak ayarladığınızı varsayalım. Yani sadece o özelliğini kontrol edin:

private void Win() 
{ 
    if (cardsHolder.Controls.OfType<PictureBox>().Any(pb => pb.Image == null)) 
     return; 

    MessageBox.Show("You matched all the icons!", "Congratulations"); 
    Close(); 
} 

OfType<PictureBox> tüm Controls koleksiyonundan PictureBox es ve Any döner true bunlardan biri hiç Image varsa seçer.

+0

Maalesef resmi maskelemek için başka bir resim ekledim. –

+0

Bu yüzden, genel olarak iyi bir fikir olan ui_'den iş (oyun) mantığını birbirinden ayırmayı denemenizi öneriyorum. Oyunun _state_ öğesini bunun için tasarlanmış bir sınıfta tutun ve resimlerinizi bu duruma göre güncelleyin. Bu şekilde, winform'lar yerine bir web sitesi gibi başka bir ui kullanmaya karar verirseniz kodunuzu yeniden kullanmak daha kolay olacaktır (sadece teorik bir ipucu). –

İlgili konular