Merhabalar kodaman okurları, yazarları.Bugün konumuz ; C# ile sayı bulma oyunu.Bazı yazılım kursuna giden arkadaşlar bilirler 3 ya da 4. hafta ödevidir kendisi.Mutfağımız;
1 Adet Vazgeçilmez Visual Studio (2003 olur, 2005 olur, 2008 olur…)1 Adet Bilgisayar2 Adet Integer tipinde Değişken1 Adet MaskedTextbox1 Adet Buton1 Adet Random nesnesi (!)1 kaç Adet if koşulu (Döngüsü değil!)
Peki biz ne yapacağız?
Programımız açıldığında, 1 ile 15 arasında bir sayı tutacak. Dizayn tarafında koymuş olduğumuz MaskedTextbox’tan girdiğimiz değere göre bize bir yanıt döndürecektir.Şöyle ki ;Küçük bir sayı girdinizBüyük bir sayı girdinizDoğru cevap, tebrikler.Yabancı olduğumuz bir kaç terime, bir kaç dakikalık bakış ;
Integer ne ki?
İngilizce karşılığı ; Tam sayı.Programlama dilinde karşılığı ; Vazgeçilmez.Integer veritipi programlarımızda tam sayılarımız için kullandığımız vazgeçilmezlerimizden biridir.-2147483648 ile 2147483647 arasında bir değer alır.int i = sayım;şeklinde tanımlanır.Şayet, matematiksel bir işlem yapacaksak yolumuz mutlaka integer değişkeninin önünden geçecektir.int i = -2147483648;int i = 2147483647;
Random da ne ki?
Integer türünden verdiğimiz 2 değer arasında rastgele bir sayı seçerek bize döndüren,Integer olarak verdiğimiz maksimum değere kadar, pozitif rastgele bir sayı döndüren,Hiçbirşey vermediğimizde pozitif max. integer değerine kadar (2147483647) bir değer döndüren nesnemizdir.Kullanımı ve tanımlaması oldukça basittir.Random rnd = new Random();rnd.Next(1,15); // 1. Durumrnd.Next(3); // 2. Durumrnd.Next(); // ve 3. Durum
Next() methodu dışında, kullanabileceğimiz, NextBytes ve NextDouble bulunmaktadır. Byte ve Double değişkenlerini görmediğimizi varsayarak şimdilik atlıyorum.Hak değişkenimi tanıyorum ve sayımı form açılışında tutuyorum ;Ayrıca birde integer sayımı belirtiyorum.int hakkim = 0;int tutulanSayi = 0;private void Form1_Load(object sender, EventArgs e){Random rndSayiTut = new Random();tutulanSayi = rndSayiTut.Next(1, 15);hakkim = 3;// 3 Hak verdik.}
hakkim ve tutulanSayi değişkeninin bu şekilde dışarda olması durumuna ‘public’ deniliyor. Form_Load (Yükleme) eventında (Olayında) olduğu gibi, bu değişkenimize Button click (Tıklanma) eventında da ihtiyacımız olacağından değişkenimizi halka açık bir şekilde tanımlamış bulunuyoruz.Shift + F7 kısa yolu ile, ya da boş beyaz alanımıza sağ tıklayarak, View Designer seçeneği ile tasarım tarafımıza geçiyoruz.Ctrl + W,X kısa yolu veya View > Toolbox seçeneği yardımı ile formumuza bir adet Button ve MaskedTextBox sürükleyip bırakıyoruz. (maskedTextBox1 ve button1) Formumuzda fazla kargaşa yaşanmayacağından isimlendirme gereği duymuyorum. Basit bir yerleşim yaparak sadece, button’uma sağ tıklayarak Properties (F4 kısayolu) Text : özelliğini “Buldum mu?” olarak değiştiriyorum.MaskedTextBox’ın üzerine bir kez tıkladığınızda sağ üst tarafında küçük bir smart tag göreceksiniz. Buraya tıklayarak Numeric 5 digits (1.seçenek) seçip alttaki 5 adet sıfırı, 2 adet sıfır olarak değiştiriyoruz.Ne yaptık?
MaskedTextBox giriş yapılacak olan veriyi çalışma zamanında bir olay olmadan kontrol eder. Bu şekilde, 2 rakamlı bir sayı girecek diyerek, kullanıcının olası yanlış karakter girişini bir başka deyişle güvenliğimizi sağladık. MaskedTextBox’a ait bu şekilde, Tarih-Zaman girişi, Telefon numarası girişi ve Custom olarak kendi veri kontrol tipimizi tanımlayacağımız seçenekleri bulunmaktadır.Sanki programım çalışıyormuş gibi butonun üzerine 2 kez tıklıyorum.private void button1_Click(object sender, EventArgs e){}
Butona tıklandığında…Bu kısımda girilen değer sayımı diye bakmıyorum çünkü bu işi benim için MaskedTextBox yaptı. Sadece gelen değeri tuttuğum sayı ile if koşulu yardımı ile karşılaştıracağım.Bir kaç dakikada if…
Programcılığın bir değişilmezi daha bugün aramızda.if koşullarından, true yada false olarak (0 yada 1) olarak bir değer döndürür işlemlerimizi bu doğrultuda devam ettiririz. Yani ;if (Param minibüse yetermi?){Minibüse bineyim.}else if (Trene yetermi?){Trene bineyim}else{E o zaman çare yok şunu yapayım.}
Bu kısımda “else if” leri uzatabiliriz yada hiç kullanmayabiliriz. Yalnızca bir if ile tek kontrol yapıp çıkabiliriz fakat “else”‘i if olmadan kullanamayız. Peki oyunumuzda bize ne yapacak bu ifler?Sayım, 1 ile 15 arasında mı? ( if )Demekki oyuna başlayabiliriz ;Sayım, tutulan sayıdan büyükmü ? ( if )Sayım, tutulan sayıdan küçükmü? ( else if )E bunların hiçbiri değilse, Bilmiş sayıyı! ( else )Sayım, 1 ile 15 arasında değil ne yazıkki. Hakkını almadım ama merak etme (else)Farkettiyseniz iç içe 2 if koşulu yaptık. Eğer sayı 1 ile 15 arasındaysa oyuna başlayabilecek kullanıcı. Çok gerekli olmamakla birlikte bu koşulun üzerinde biraz durmak için böyle birşey yapıyoruz.E yazalım öyleyse
if yazarak 2 kez tab tuşuna basıyoruz. ;if (true){}
true ? : Koşul bekliyor…int girilenSayi = Convert.ToInt32(maskedTextBox1.Text);if ( girilenSayi > 0 && girilenSayi < 16){}else{MessageBox.Show("Lütfen 1-15 arasında bir sayı giriniz.");}
Tuttuğum sayı 0’dan büyük mü? 16’dan küçük mü?Convert nerden çıktı?
Convert Tür değişimi yaparak bizlere kolaylık sağlayan muhteşem nesnelerimizden bir tanesidir.Convert.ToInt32();TextBox’tan giriş yaptığımız değer sayıda olsa bir string’tir. Bunun matematiksel bir işe yarayacağını Convert kullanarak belirleriz. Şayet, bu dönüşümü yapmazsak,Operator ‘>’ cannot be applied to operands of type ‘string’ and ‘int’ hatasını alırız.
Aynı şekilde bizimde göstereceğimiz değerler string türünde olmalıdır. Bunuda genelde, sayi.ToString(); şeklinde yaparız. ( Bu konuları yeni başlayan arkadaşların daha detaylı incelemesi gerekiyor. )Döngümün kalan kısımlarını yazarak devam ediyorum ;Button1 Click eventının son durumu ;private void button1_Click(object sender, EventArgs e){int girilenSayi = Convert.ToInt32(maskedTextBox1.Text);if ( girilenSayi > 0 && girilenSayi < 16){if (girilenSayi > tutulanSayi){MessageBox.Show(“Küçült”);}else if (girilenSayi < tutulanSayi){MessageBox.Show("Azcık büyüt");}else{MessageBox.Show("Helal buldun be!");}}else{MessageBox.Show("Lütfen 1-15 arasında bir sayı giriniz.");}}
Hakkımız vardı.Hangi durumlarda hak düşeceğini düşünüyoruz.Küçük ve büyük girilen durumlarda, bu durumda MessageBox.Show kodlarının altına, hak düşmesini istediğimiz yerlerde, i– yazıyoruz.Minicik ipucu :integer veri tiplerinde, i++ (1 arttır), i– (1 küçült), –i (önce küçült…)… gibi kısaltmalarla işlem yapabiliriz.MessageBox.Show(“Küçült”);–hakkim;şeklinde hak düşmesini istediğimiz yerlere ekliyoruz. Ve son bir koşul, hakkı 0’a eşitse form kapansın ve oyuna devam edemesin.Kodlarımızın son hali aşağıdaki gibi oluyor ;int hakkim;int tutulanSayi = 0;private void Form1_Load(object sender, EventArgs e){Random rndSayiTut = new Random();tutulanSayi = rndSayiTut.Next(1, 15);hakkim = 3;}private void button1_Click(object sender, EventArgs e){if (hakkim != 0){int girilenSayi = Convert.ToInt32(maskedTextBox1.Text);if (girilenSayi > 0 && girilenSayi < 16){if (girilenSayi > tutulanSayi){MessageBox.Show(“Küçült”);–hakkim;}else if (girilenSayi < tutulanSayi){MessageBox.Show("Azcık büyük");--hakkim;}else{MessageBox.Show("Helal buldun be!");hakkim = 3;}}else{MessageBox.Show("Lütfen 1-15 arasında bir sayı giriniz.");}}else{this.Close();}}
unutmayın, –hakkim yerine hakkim–; kullanırsanız, oyun oynayan kişi 4 hak kullanmış olur.Neler öğrenmeye çalıştık?
if koşulu nasıl kullanılır?Random nesnesi nedir?Convert nesnesine kısa bir bakışToString() nedir?integer nedir? nasıl tanımlanır?MaskedTextBox ile giriş maskelemesi…Sevgili kodaman yazarları ve okurları bir makalemizin daha sonuna geldik. Yanlışımız varsa af-ola.