Ş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();
}
Ş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.
YanıtlaSilif (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.
Koşulda şöyle olabilir;
YanıtlaSilGlobal 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.