
Hedef Vurma Oyunu
Bu derste geliştireceğimiz uygulama bir form üzerinde görünüp kaybolan daireler gösterecek, ve daireleri tıklamayı becerirse kullanıcıya puan verecek olan basit bir oyun programıdır. Ama amaç oyunla vakit öldürmek değil, bir Windows uygulamasında Timer (zamanlayıcı) kontrolünün nasıl kullanıldığını göstermek ve kullanıcıya uygulamanın davranışını değiştiren parametreleri ayarlama yeteneğinin nasıl sağlandığını göstermektir.
Uygulama Formunun Hazırlanışı
Oyunumuz uzayda veya gece vakti hedef vurma izlenimini versin diye formun geri plan rengini karanlık bir renk seçelim, örneğin, gece mavisi (MidnightBlue) güzel bir seçim olacaktır.
Zamanlama işini Toolbox’dan seçip form üzerine bırakacağımız bir Timer kontrolüne bırakacağız. Bu kontrolün değişken adı “Saat” olsun. (Tabi, her zaman olduğu gibi okuyucularımız kontrolleri ve değişkenleri kendi istedikleri gibi adlandırabilirler. Biz buradaki kodlarda kullandığımız değişken adlarının hangisinin neye karşılık geldiği açıklıyoruz.)
İlk işimiz zamanlayıcı kontrolümüz Saat’in tik-tak aralığını belirlemektir. Tasarım görünümünde (Design View) bu kontrolün özelliklerini inceleyen okuyucularımız Interval (aralık) adlı bir özellik görecektir. Saat’in ardışık tikleri arasındaki süre bu özellikle belirlenir. İlk yerleştirilen bir Timer kontrolü için Interval değeri 100’dür (en azından bu notların yazımı için yaratılan projede durum buydu). Bu değer milisaniye (kısaca ms) cinsinden bir süredir; yani Saat 0.1 saniyede bir tik yapacak. Bu biraz fazla hızlı gelebiir. Biz bu değeri 500 yapalım ki süre 0.5 saniye olsun.
İkinci işimiz Saat het tik yaptığında bir şeyler yapabilmek için onun Tick mesajını yanıtlayacak bir fonksiyon yaratmaktır. Bu fonksiyonun adı OnSaatTick olsun. Oyun programımız Saat her tıkladığında form üzerinde rasgele bir yere bir daire çizsin istiyoruz. O yüzden bu fonksiyonun içini şu şekilde doldurabiliriz:
private void OnSaatTick(object sender, EventArgs e)
{
// Koordinatlari rasgele belirlemek için bir random sayı üreteci
Random rnd = new Random();
// Daire koordinatları
int x = rnd.Next(this.ClientRectangle.Width);
int y = rnd.Next(this.ClientRectangle.Height);
// ve çapı
int cap = rnd.Next(25, 50);
Graphics fg = this.CreateGraphics();
fg.FillEllipse(new SolidBrush(Color.Yellow),x, y, cap, cap);
}

