Basit Bilgi Oyunu

Bu yazımızda Csharpta değişkenlerin kullanımına ve karar yapılarına yönelik basit bir oyuncuk yapalım. Oyunumuz şöyle olsun tabi ben şimdi genel hatları ile yazacağım ama ayrıntısını kodlar içinde açıklayacağım.

Oyunda  adet soru sorulacak. Sorularım RichTextBox içinde yayınlanacak. Kullanıcı her bir soru için 4 seçenekte yer alan bir şıkkı seçebilecek. Eğer doğru cevap verirse doğru sayısı 1 artacak, eğer yanlış cevap verirse yanlış sayısı 1 artacak. Kaçıncı soruda olduğumu, doğru sayımı ve yanlış sayımı görebileceğim. Ayrıca iki tane de picturebox ile doğru cevapta tik işareti göstren bir resim, yanlış cevapta da çarpı işareti gösteren bir resmim olacak. Bir sonraki soruya geçmek için sonraki soru butonum olacak. Kabaca bu şekilde. Öncelikle tasarım ile başlayalım. Tasarımım aşağıdaki gibi:

basit bilgi oyunu

Formumun Text Özelliği: Basit Bilgi Oyunu

Kullandığım diğer komponetleri sıralıyorum.

RichTextBox1 isim değişikliği yapmadım aynı bırakıyorum, 1 tane kullanacağım çünkü.

A Butonu : btnA

B Butonu : btnB

C Butonu : btnC

D Butonu : btnD

Soru No: Label olacak. Karşısında yine bir label var. Text özelliği …. Name özelliği de lblSoruNo

Doğru: Label olacak. Karşısında yine bir label var. Text özelliği ….. Name özelliği de lblDogru

Yanlış: Label olacak. Karşısında yine bir label var. Text özelliği ….. Name özelliği de lblYanlis

Sonraki Soru butonum. btnSonrakiSoru

İki adet picturebox ekledim. Soldaki pcbDogru sağdaki pcbYanlis. Görselleri internetten bulabilirsiniz.

Bir de  text özelliği label4 ve label5 olan iki label var. Bunların kullanımı önemli. Ama öncesinde name özellikleirni açıklayayım. Label4 için name özelliği lblVerdigimCebap. Label5 için name özelliği lblDogruCevap. Bu ikisinin de ayrıca Visible özelliklerini False yaptım.

Bunları kullanma amacım şu aslında. Label4 içinde gizli olarak verdiğim cevabı tutacağım. Label 5 te de o soruya ilişkin doğru cevap bilgisi olacak. Dolayısı ile verdiğim cevap ve doğru cevap eşleşirse doğru sayım artacak. Yanlış olursa yanlış sayım artacak.

Kodlamaya geçelim:

Global alanda aşağıdaki kodları tanımladım.

int SoruNo = 0, DogruSayisi = 0, YanlisSayisi = 0;

Bu değişkenlerimde isimlernden de anlaşılacağı üzere soru no, doğru sayısı ve yanlış sayısını tutacağım. En başta bunları sıfırlıyorum.

Daha sonra sonraki soru butonumun click eventine aşağıdaki kodları yazıyorum.

Senaryom şu şekilde. Öncelikle A,B,C ve D butonum form yüklendiğinde açık şekilde olacak. Pictureboxların hepsi gizli. Sonraki soruya bastığımda soru richtextbox üzerinde yer alacak. Saru No 1 artacak. Seçeneklerim de altta A,B,C,D butonlarında yazacak. Soru geldiği esnada soruyu cevaplayana kadar Sonraki Soru butonum pasif olacak. Soruyu seçenek butonlarımdan cevapladığımda doğru ise doğru picturebox yanlış ise yanlış picturebox sembölü görülecek. Ve tabi buna ilişkin olarak da doğru ise doğru sayısını gösteren label 1 artacak, yanlış ise yanlış sayısını gösteren label 1 artacak. Cevabı verdiğim de seçenekleri gösteren butonlar pasif olacak. Sonraki soru butonum aktif olacak. Bu işlem taki 5. Soruya kadar böyle gidecek. 5. Soru sorulduktan sonra soru sayısını gösteren label artık Sorular Bitti yazacak. Ve bir messagebox ile kullanıcıya yanlış ve doğru sayısını göstereceğim. Ve bu esnada tüm butonlar ve pictureboxlar pasif olacak.

Sonraki Soru butonuma ilişkin kodlarım:

private void btnSonrakiSoru_Click(object sender, EventArgs e)
        {
            //tüm butonlarım aktif, pictureboxlar pasif.
            btnA.Enabled = true;
            btnB.Enabled = true;
            btnC.Enabled = true;
            btnD.Enabled = true;
            btnSonrakiSoru.Enabled = false;
            pcbDogru.Visible = false;
            pcbYanlis.Visible = false;
            //Soru noyu 1 arttırdım. LAbel üzerine soru numara sayısını yazdım.
            SoruNo++;
            lblSoruNo.Text = SoruNo.ToString();

            //Sorularımı soruyorum. 1'den 5. soruya kadar aynı şekilde devam ediyorum.
            if (SoruNo == 1)
            {
                richTextBox1.Text = "İstanbul hangi yılda fethedildi?";

                btnA.Text = "1253";
                btnB.Text = "1353";
                btnC.Text = "1453";
                btnD.Text = "1553";

                lblDogruCevap.Text = "1453";

            }

            if (SoruNo == 2)
            {
                richTextBox1.Text = "Cumhuriyet hangi yılda kuruldu?";

                btnA.Text = "1933";
                btnB.Text = "1923";
                btnC.Text = "1913";
                btnD.Text = "1903";

                lblDogruCevap.Text = "1923";

            }

            if (SoruNo == 3)
            {
                richTextBox1.Text = "GS hangi yılda kuruldu?";

                btnA.Text = "1905";
                btnB.Text = "1903";
                btnC.Text = "1907";
                btnD.Text = "1904";

                lblDogruCevap.Text = "1905";

            }

            if (SoruNo == 4)
            {
                richTextBox1.Text = "Osmanlı devleti hangi yılda kuruldu?";

                btnA.Text = "999";
                btnB.Text = "1099";
                btnC.Text = "1199";
                btnD.Text = "1299";

                lblDogruCevap.Text = "1299";

            }

            if (SoruNo == 5)
            {
                richTextBox1.Text = "TBMM hangi yılda açıldı?";

                btnA.Text = "1919";
                btnB.Text = "1920";
                btnC.Text = "1921";
                btnD.Text = "1922";

                lblDogruCevap.Text = "1920";

                btnSonrakiSoru.Text = "Sonuçlar";

            }

            //sorularım bitince artık butonlarım pasif. Kullanıcıya sonucu veriyorum.
            if (SoruNo == 6)
            {
                lblSoruNo.Text = "Sorular Bitti!";

                btnA.Enabled = false;
                btnB.Enabled = false;
                btnC.Enabled = false;
                btnD.Enabled = false;

                btnSonrakiSoru.Enabled = false;
                MessageBox.Show("Doğru Sayısı:" + DogruSayisi + "\n" + "Yanlış Sayısı:" + YanlisSayisi);

            }
        }

Tüm seçenek butonları için kodlarım.

btnA için:

//Her seçenek butonun click eventinde en başta butonlarımı pasif yapıyorum. Cevabımın doğru ve yanlışlığını kontrol ediyorum. Eğer doğru ise doğru sayım 1 artıyor, yanlış ise 1 azalıyor. Buna ilişkin olarak da uygun picturebox sembolümü aktif ediyorum.
        private void btnA_Click(object sender, EventArgs e)
        {
            btnA.Enabled = false;
            btnB.Enabled = false;
            btnC.Enabled = false;
            btnD.Enabled = false;

            btnSonrakiSoru.Enabled = true;

            lblVerdigimCevap.Text = btnA.Text;

            if (lblDogruCevap.Text == lblVerdigimCevap.Text)
            {
                DogruSayisi++;
                lblDogru.Text = DogruSayisi.ToString();
                pcbDogru.Visible = true;
            }
            else
            {
                YanlisSayisi++;
                lblYanlis.Text = YanlisSayisi.ToString();
                pcbYanlis.Visible = true;
            }
        }

btnB için:

//Her seçenek butonun click eventinde en başta butonlarımı pasif yapıyorum. Cevabımın doğru ve yanlışlığını kontrol ediyorum. Eğer doğru ise doğru sayım 1 artıyor, yanlış ise 1 azalıyor. Buna ilişkin olarak da uygun picturebox sembolümü aktif ediyorum.
        private void btnB_Click(object sender, EventArgs e)
        {
            btnA.Enabled = false;
            btnB.Enabled = false;
            btnC.Enabled = false;
            btnD.Enabled = false;

            btnSonrakiSoru.Enabled = true;

            lblVerdigimCevap.Text = btnB.Text;

            if (lblDogruCevap.Text == lblVerdigimCevap.Text)
            {
                DogruSayisi++;
                lblDogru.Text = DogruSayisi.ToString();
                pcbDogru.Visible = true;
            }
            else
            {
                YanlisSayisi++;
                lblYanlis.Text = YanlisSayisi.ToString();
                pcbYanlis.Visible = true;
            }
        }

btnC için

//Her seçenek butonun click eventinde en başta butonlarımı pasif yapıyorum. Cevabımın doğru ve yanlışlığını kontrol ediyorum. Eğer doğru ise doğru sayım 1 artıyor, yanlış ise 1 azalıyor. Buna ilişkin olarak da uygun picturebox sembolümü aktif ediyorum.
        private void btnC_Click(object sender, EventArgs e)
        {
            btnA.Enabled = false;
            btnB.Enabled = false;
            btnC.Enabled = false;
            btnD.Enabled = false;

            btnSonrakiSoru.Enabled = true;

            lblVerdigimCevap.Text = btnC.Text;

            if (lblDogruCevap.Text == lblVerdigimCevap.Text)
            {
                DogruSayisi++;
                lblDogru.Text = DogruSayisi.ToString();
                pcbDogru.Visible = true;
            }
            else
            {
                YanlisSayisi++;
                lblYanlis.Text = YanlisSayisi.ToString();
                pcbYanlis.Visible = true;
            }
        }

btnD için

//Her seçenek butonun click eventinde en başta butonlarımı pasif yapıyorum. Cevabımın doğru ve yanlışlığını kontrol ediyorum. Eğer doğru ise doğru sayım 1 artıyor, yanlış ise 1 azalıyor. Buna ilişkin olarak da uygun picturebox sembolümü aktif ediyorum.
        private void btnD_Click(object sender, EventArgs e)
        {
            btnA.Enabled = false;
            btnB.Enabled = false;
            btnC.Enabled = false;
            btnD.Enabled = false;

            btnSonrakiSoru.Enabled = true;

            lblVerdigimCevap.Text = btnD.Text;

            if (lblDogruCevap.Text == lblVerdigimCevap.Text)
            {
                DogruSayisi++;
                lblDogru.Text = DogruSayisi.ToString();
                pcbDogru.Visible = true;
            }
            else
            {
                YanlisSayisi++;
                lblYanlis.Text = YanlisSayisi.ToString();
                pcbYanlis.Visible = true;
            }
        }

Programımız bu kadar. Sonuç ekranı ile de alakalı bi görsel paylaşalım.

basit bilgi oyunu

Tüm kodları tek bir noktada paylaşalım ve bitirelim.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace KararYapilariOrnekler
{
    public partial class Form9 : Form
    {
        public Form9()
        {
            InitializeComponent();
        }
        //global alanda tanımladığım değişkenlerim.
        int SoruNo = 0, DogruSayisi = 0, YanlisSayisi = 0;
        //Her seçenek butonun click eventinde en başta butonlarımı pasif yapıyorum. Cevabımın doğru ve yanlışlığını kontrol ediyorum. Eğer doğru ise doğru sayım 1 artıyor, yanlış ise 1 azalıyor. Buna ilişkin olarak da uygun picturebox sembolümü aktif ediyorum.
        private void btnB_Click(object sender, EventArgs e)
        {
            btnA.Enabled = false;
            btnB.Enabled = false;
            btnC.Enabled = false;
            btnD.Enabled = false;

            btnSonrakiSoru.Enabled = true;

            lblVerdigimCevap.Text = btnB.Text;

            if (lblDogruCevap.Text == lblVerdigimCevap.Text)
            {
                DogruSayisi++;
                lblDogru.Text = DogruSayisi.ToString();
                pcbDogru.Visible = true;
            }
            else
            {
                YanlisSayisi++;
                lblYanlis.Text = YanlisSayisi.ToString();
                pcbYanlis.Visible = true;
            }
        }
        //Her seçenek butonun click eventinde en başta butonlarımı pasif yapıyorum. Cevabımın doğru ve yanlışlığını kontrol ediyorum. Eğer doğru ise doğru sayım 1 artıyor, yanlış ise 1 azalıyor. Buna ilişkin olarak da uygun picturebox sembolümü aktif ediyorum.
        private void btnC_Click(object sender, EventArgs e)
        {
            btnA.Enabled = false;
            btnB.Enabled = false;
            btnC.Enabled = false;
            btnD.Enabled = false;

            btnSonrakiSoru.Enabled = true;

            lblVerdigimCevap.Text = btnC.Text;

            if (lblDogruCevap.Text == lblVerdigimCevap.Text)
            {
                DogruSayisi++;
                lblDogru.Text = DogruSayisi.ToString();
                pcbDogru.Visible = true;
            }
            else
            {
                YanlisSayisi++;
                lblYanlis.Text = YanlisSayisi.ToString();
                pcbYanlis.Visible = true;
            }
        }
        //Her seçenek butonun click eventinde en başta butonlarımı pasif yapıyorum. Cevabımın doğru ve yanlışlığını kontrol ediyorum. Eğer doğru ise doğru sayım 1 artıyor, yanlış ise 1 azalıyor. Buna ilişkin olarak da uygun picturebox sembolümü aktif ediyorum.
        private void btnD_Click(object sender, EventArgs e)
        {
            btnA.Enabled = false;
            btnB.Enabled = false;
            btnC.Enabled = false;
            btnD.Enabled = false;

            btnSonrakiSoru.Enabled = true;

            lblVerdigimCevap.Text = btnD.Text;

            if (lblDogruCevap.Text == lblVerdigimCevap.Text)
            {
                DogruSayisi++;
                lblDogru.Text = DogruSayisi.ToString();
                pcbDogru.Visible = true;
            }
            else
            {
                YanlisSayisi++;
                lblYanlis.Text = YanlisSayisi.ToString();
                pcbYanlis.Visible = true;
            }
        }
        //Her seçenek butonun click eventinde en başta butonlarımı pasif yapıyorum. Cevabımın doğru ve yanlışlığını kontrol ediyorum. Eğer doğru ise doğru sayım 1 artıyor, yanlış ise 1 azalıyor. Buna ilişkin olarak da uygun picturebox sembolümü aktif ediyorum.
        private void btnA_Click(object sender, EventArgs e)
        {
            btnA.Enabled = false;
            btnB.Enabled = false;
            btnC.Enabled = false;
            btnD.Enabled = false;

            btnSonrakiSoru.Enabled = true;

            lblVerdigimCevap.Text = btnA.Text;

            if (lblDogruCevap.Text == lblVerdigimCevap.Text)
            {
                DogruSayisi++;
                lblDogru.Text = DogruSayisi.ToString();
                pcbDogru.Visible = true;
            }
            else
            {
                YanlisSayisi++;
                lblYanlis.Text = YanlisSayisi.ToString();
                pcbYanlis.Visible = true;
            }
        }

        private void btnSonrakiSoru_Click(object sender, EventArgs e)
        {
            //tüm butonlarım aktif, pictureboxlar pasif.
            btnA.Enabled = true;
            btnB.Enabled = true;
            btnC.Enabled = true;
            btnD.Enabled = true;
            btnSonrakiSoru.Enabled = false;
            pcbDogru.Visible = false;
            pcbYanlis.Visible = false;
            //Soru noyu 1 arttırdım. LAbel üzerine soru numara sayısını yazdım.
            SoruNo++;
            lblSoruNo.Text = SoruNo.ToString();

            //Sorularımı soruyorum. 1'den 5. soruya kadar aynı şekilde devam ediyorum.
            if (SoruNo == 1)
            {
                richTextBox1.Text = "İstanbul hangi yılda fethedildi?";

                btnA.Text = "1253";
                btnB.Text = "1353";
                btnC.Text = "1453";
                btnD.Text = "1553";

                lblDogruCevap.Text = "1453";

            }

            if (SoruNo == 2)
            {
                richTextBox1.Text = "Cumhuriyet hangi yılda kuruldu?";

                btnA.Text = "1933";
                btnB.Text = "1923";
                btnC.Text = "1913";
                btnD.Text = "1903";

                lblDogruCevap.Text = "1923";

            }

            if (SoruNo == 3)
            {
                richTextBox1.Text = "GS hangi yılda kuruldu?";

                btnA.Text = "1905";
                btnB.Text = "1903";
                btnC.Text = "1907";
                btnD.Text = "1904";

                lblDogruCevap.Text = "1905";

            }

            if (SoruNo == 4)
            {
                richTextBox1.Text = "Osmanlı devleti hangi yılda kuruldu?";

                btnA.Text = "999";
                btnB.Text = "1099";
                btnC.Text = "1199";
                btnD.Text = "1299";

                lblDogruCevap.Text = "1299";

            }

            if (SoruNo == 5)
            {
                richTextBox1.Text = "TBMM hangi yılda açıldı?";

                btnA.Text = "1919";
                btnB.Text = "1920";
                btnC.Text = "1921";
                btnD.Text = "1922";

                lblDogruCevap.Text = "1920";

                btnSonrakiSoru.Text = "Sonuçlar";

            }

            //sorularım bitince artık butonlarım pasif. Kullanıcıya sonucu veriyorum.
            if (SoruNo == 6)
            {
                lblSoruNo.Text = "Sorular Bitti!";

                btnA.Enabled = false;
                btnB.Enabled = false;
                btnC.Enabled = false;
                btnD.Enabled = false;

                btnSonrakiSoru.Enabled = false;
                MessageBox.Show("Doğru Sayısı:" + DogruSayisi + "\n" + "Yanlış Sayısı:" + YanlisSayisi);

            }
        }
    }
}

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir