C# Form Sayı Tahmin Oyunu

Herkese Merhaba! Bugün C# kullanarak Sayı tahmin oyunu geliştireceğiz. Daha önce Java kullanarak bu uygulamayı yapmıştık. Bugün tekrardan C# üzerinde sayı tahmin oyunu yapmamızın sebebi ilk form uygulamamızı geliştirmek için. Evet artık form uygulamalarına başlıyoruz. Sürekli sayısal analiz yazmayacaktım tabii ki 🙂 Bugün hazırladığım bir diğer yazımda da form uygulaması olarak geliştireceğiz. Haydi ufaktan form nedir diyerek başlayalım!


Form Nedir?

Form bizim bilgisayar ortamında kullandığımız her şeydir. Evet şaşırmış olabilirsiniz fakat durum böyle. Çünkü şuan bu yazıyı okuduğunuz tarayıcının bile bir penceresi ve kullandığı birçok aracı mevcut. Form uygulamaları da tam olarak buna giriyor. C# dilinde form uygulamaları için çok güçlü araçlar var. Bu araçların üstüne bir o kadar güçlü bir form geliştirme uygulaması var. Adı DevExpress olan bu uygulamayı bugünkü diğer yazımda ve bundan sonraki neredeyse tüm C# üzerindeki form ile ilgili uygulamalarımda kullanacağım. Gerçekten çok kullanışlı araçları mevcut. Bugün onlardan birkaçını kullanarak güzel bir uygulama yapacağız. Geçmeden önce diğer yazımda da belirttim burada da belirtmek isterim DevExpressi nasıl edinebilirim derseniz internet üzerinde birçok crack dosyasını bulabilirsiniz. Veya direkt satın alarak profesyonel sürümünü de kullanabilirsiniz. Haydi artık uygulamamıza geçelim 🙂


Nasıl bir oyun olacak?

Öncelikle isterlerimizi sıralayalım.

  1. İlk olarak oyunumuz rakamlar üzerinde oynanacaktır. (Java yazımızdaki gibi level özelliği de getirebilirsiniz. Fakat bu ilk form uygulamamız olduğu için daha basit tutmak istiyorum.)
  2. Ardından 3 adet hakkımız olacak. Ve bunlar can gibi düşünülüp form ekranında oyunu oynayan kullanıcıya gösterilecek.
  3. Canlar “❤” simgesi ile yapılan hatalardan sonra “❤” simgesi yerine “✘” simgesi getirilecektir. (Örneğin 1 can kalınca: ❤✘✘)
  4. Ve son olarak göze hoş gelecek 🙂

Kullanacağımız araçları form uygulamamıza yerleştirelim

Burada genellikle DevExpress araçlarına yer verdim fakat siz bu uygulamayı normal C# form araçlarıyla da yapabilirsiniz. Örneğin orada koymuş olduğum “Tahmininizi giriniz!” yazısının altındaki sayı girişi yapılan alan bir DevExpress aracıdır adı SpinEdit olarak geçmektedir. Fakat siz illa da bunu kullanmak zorunda değilsiniz. Çünkü belirttiğim gibi bunlar sadece kullanıcılarımızı mutlu etmek adına yaptığımız ufak görsel eklentiler veya kolaylıklarda diyebiliriz. Çünkü o aracın yaptığı kolaylık sayıyı girmek için yazmak dışında arttırıp, azaltarak da sayı girişi yapılabilmektedir. Onun dışındaki tüm araçları normal C# form araçlarından da kullanabilirsiniz. Bu en alttaki button için de geçerli. Burada kullandığım button DevExpress buttonu olsa daha siz normalini kullanabilirsiniz. Zaten yapacağımız kodlama yalnızca ButtonClick eventine olacak.

Özetlemek gerekirse kullandığımız araçlar; beş adet label, bir adet SpinEdit (veya TextBox) ve bir adet SimpleButton (Veya normal Form button) şeklindedir.

Sayı Tahmin Oyunu Form 1.1

Ben bu şekilde bir form dizayn ettim. Sizde kendi zevkinize göre form ekranı tasarlayabilirsiniz. Veya ben bu kadar araç kullandım diye bu kadar araç kullanmak zorunda değilsiniz. Yazılımda genelde bir sorunun birden fazla çözüm yöntemi oluyor. Size belirttiğim isterler doğrultusunda daha farklı bir şekilde geliştirim yapabilirsiniz.


Kodlayalım..
namespace SayiTahminOyunu
{
    public partial class Form1 : Form
    {
        int tahminEdilecekSayi = (new Random()).Next(0, 10);  //class özelliği gibi en dışarda sayıyı belirledim
        int can = 3;                                          // Aynı şekilde canımı da belirttim
        public Form1()
        {
            InitializeComponent();
        }
        public String kalanCan (int canDegeri)   //Bizden istenilen 3. ister için böyle bir fonksiyon yazıyoruz.
            {

                                                 //KalanCan isimli bu fonksiyon String değer döndürüp int canDegeri değişken almaktadır.   
                                        //Anlayacağınız üzere fonksiyona gönderilen can değerine göre aşağıdaki stringlerden biri döndürelecek
                string canYazisi = "";

                if (canDegeri == 2)
                {
                    canYazisi = "❤❤✘";
                }

                else if(canDegeri == 1)
                {
                    canYazisi = "❤✘✘";
                }

                else if(canDegeri == 0)
                {
                    canYazisi = "✘✘✘";
                }
                return canYazisi;
            }

        private void btnTahminYap_Click(object sender, EventArgs e)   //Burada en alttaki "btnTahminYap" butonumun click eventine yazıyoruz
        {
            if (can == 0)  //eğer can değerimiz sıfır iken butona basılıyorsa aşağıdaki işlemleri yapıyoruz
            {
                MessageBox.Show("Maalesef canınız kalmadı!" + can, "Üzgünüz!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            if (txtTahmin.Text == null) //spineditte o alan boş bırakılamasa da textbox kullanacaklar için burası önemli
            {
                // eğer tahmin alanı boş ise aşağıdaki mesajı veriyoruz
                MessageBox.Show("Lütfen bir tahmin değeri giriniz!", "Uyarı", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            //tahmin isimli değişkende tahmin yerine girilen sayıyı tutuyoruz
            int tahmin = Convert.ToInt32(txtTahmin.Text);

            //tahmin yaptığımız için canımızı bir azaltıyoruz
            can--;

            //kalanCan isimli fonksiyonumuza can değerimizi gönderiyoruz ve oradan dönecek stringi canımızı temsil eden lbl Textine yazıyoruz
            lblCan.Text = kalanCan(can);

            if (tahmin == tahminEdilecekSayi)  // Eğer tahminimiz doğruysa aşağıdaki işlemleri yapıyoruz.
            {
                 //Kullanıcıya tahmininin doğru olduğunu ve yeni bir oyuna başlamak isteyip istemediğini soruyoruz. Eğer 'Yes'e basarsa
                 //Uygulamayı yeniden başlatıyoruz, Eğer else koşuluna girerse de 'No' basmış olacağı için uygulamayı kapatıyoruz.
                if (MessageBox.Show("Tahmininiz Doğru! Yeni Oyuna Başlamak İstermisiniz? ", "!!!Tebrikler!!!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    Application.Restart();
                }
                else
                {
                    MessageBox.Show("Uygulama Kapatılıyor..", "Kapatılıyor..", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    Application.Exit();
                }
            }
            else   // Eğer tahminimiz yanlışsa aşağıdaki işlemleri yapıyoruz.
            {
                if (can == 0)
                {
                    MessageBox.Show("Oyun Bitti! Maalesef canınız kalmadı! Bulmanız gereken sayı: "+tahminEdilecekSayi, "Üzgünüz!",MessageBoxButtons.OK,MessageBoxIcon.Hand);
                    if (MessageBox.Show("Yeni Oyuna Başlamak İstermisiniz? ", "Bi el daha :)", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        Application.Restart();
                    }
                    else
                    {
                        MessageBox.Show("Tekrar Görüşmek Üzere :) Uygulama Kapatılıyor..", "Kapatılıyor..", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        Application.Exit();
                    }
                }
                if (tahminEdilecekSayi > tahmin)
                {
                    MessageBox.Show("Tahmininiz Yanlış! Tahmin Değerinizi Büyültün :)\n Kalan canınız: " + can, "Üzgünüz!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    MessageBox.Show("Tahmininiz Yanlış! Tahmin Değerinizi Küçültün :)\n Kalan canınız: " + can, "Üzgünüz!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            
        }
    }
}

Her ne kadar satır satır açıklamaya çalışsam da anlaşılmayan yerler olabilir. Bu durumda bana ulaşabilirsiniz. Hadi gelin şimdi oyunumuzu da bi el oynayalım 🙂


Oyun Vakti 🙂
Oyunda bizi karşılayan ilk ekran
Oyunda bizi karşılayan ilk ekran
İlk tahminimiz yanlış çıktı
İlk tahminimiz yanlış çıktı 🙂
İkinci tahminimizde de yanıldık :(
İkinci tahminimizde de yanıldık 🙁
Son hakkımızda doğru cevabı bulduk
Son hakkımızda doğru cevabı bulduk :))
Eğer canlarımızın hepsi biterse bizi karşılayan ekran
Eğer canlarımızın hepsi biterse bizi karşılayan ekran

Form uygulamalarına başlangıç seviyesinde olduğunu düşündüğüm bu uygulamayı geliştirmelisiniz. Başta belirttiğim gibi seviyeler ekleyebilirsiniz. Bunları iki form arası geçiş şeklinde yapabilirsiniz. Eğer talep olursa bunu birlikte de yapabiliriz. Bu yaptığım uygulamanın dosyalarını da aşağıda paylaştım. Takıldığınız bir yer olursa dosyayı indirip içerisinden de kontrol edebilirsiniz.

Buradan dosyayı indirebilirsiniz.

Son olarak bitirmeden böyle uygulama yapımı ile ilgili yazılar gerçekten benim saatlerimi alıyor. Tabii ki bu durumdan şikayetçi değilim. Fakat hem okuma açısından, hem de yazım açısından zor oluyor. Eğer isterseniz Youtube üzerinden videolarla bunun gibi birçok uygulamayı geliştirebiliriz. Bildiklerimi paylaşmak adına daha yolun başında olduğum için taleplere göre hareket ediyorum. Bu yüzden görüşleriniz benim için oldukça önemli.

Böylece bu yazımızın da sonuna geldik. Herkese sağlıklı günler dilerim! ✧❤✧