11 Nisan 2012 Çarşamba

C# 'da Köstebek Yakalama Oyunu

Merhaba arkadaşlar. Oyunun amacı: saniyede bir 100 tane butondan birini kırmızıya dönmesi ve o butonu kırmızı olduğu süre içerisinde tıklayabilmeye dayanıyor. Kırmızıya dönen buton bir saniye boyunca kırmızı kalıyor daha sonra tekrar siyaha dönüyor. Buton kırmızı olduğu süre içerisinde tıklanırsa +1 puan yazılıyor. Fakat kullanıcı geç kalıp siyah iken basarsa -1 puan alıyor. Başlat butonuyla oyun başlıyor be durdur butonu ile oyun duruyor. Puan güncel olarak kullanıcıya gösteriliyor.
Şimdiden iyi oyunlar arkadaşlar..

        int puan = 0, sayac = 0;
        Random rnd = new Random();

        private void Form1_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < 100; i++)
            {
                Button btn = new Button();
                btn.BackColor = Color.Black;
                btn.ForeColor = Color.White;
                btn.Width = 50;
                btn.Height = 50;
                btn.Text = (i + 1).ToString();

                flowLayoutPanel1.Controls.Add(btn);
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            int rastgele = rnd.Next(1,100);
            foreach (var b in flowLayoutPanel1.Controls)
            {
               Button btn = b as Button;
                if (btn.Text == rastgele.ToString())
                {
                    btn.BackColor = Color.Red;
                    btn.Click += new EventHandler(btn_Click);
                }
                else
                {
                    btn.BackColor = Color.Black;
                }
            }
            lblPuan.Text = "Puan : " + puan.ToString();
        }
        void btn_Click(object sender, EventArgs e)
        {
            Button btn = sender as Button;
            if (btn.BackColor == Color.Red)
                puan++;
            else
                puan--;
        }

        private void btnBaslat_Click(object sender, EventArgs e)
        {
            timer1.Start();
        }

        private void btnDurdur_Click(object sender, EventArgs e)
        {
            timer1.Stop();
        }


2 yorum:

  1. Şimdi bu gönderiye 5 yıl sonra yorum yazmak biraz saçma olacak ama, benim gibi sonradan gelen arkadaşlar için yazıyım. Öncelikle örnek için teşekkürler, benim düşünceme göre bu algoritmada bir eksiklik var.

    if (btn.Text == rastgele.ToString()) - Bu koşul sağlanmadan butonumuza click olayını vermiyoruz. Yani kırmızı olmayan buton tıklandığında puanımız eksilmiyor haliyle. Ve bir buton eğer ki iki defa kırmızı olduysa ben o butona beyazken bastığımda 2 puan eksiliyor. Bu kontrolleri koşullarla sağlayabiliriz, benim gibi çok ayrıntıyı dert edenler için belirtmek istedim.

    YanıtlaSil
  2. Koşulda şöyle olabilir;
    Global alanda tanımladığımız int tipinde bir değişkeni timer_Tick olayı içerisinde saniye gibi arttırıp foreach döngüsü içerisinde if(sn==1) koşulunda btn.Click += new EventHandler(btn_Click); yazarak bütün butonlara click olayını vermiş oluruz. Bu şekilde bir sorun almadım.

    YanıtlaSil