Buradasınız

Sayı Sıralama Oyunu

sayı sıralama oyunu

C# ile rastgele sayıları sıralama oyunu , Windows Form Uygulaması üzerinde 4x4 şeklinde rastgele 1'den 15'e kadar sayılar dağıtılıyor ve bir boşluk brakılarak sayılar sıraya sokulmaya çalışan bir uygulama örneğidir. Süre ve deneme sayısıda tutulmakta oyun bittiğinde tekrar oynama işlemi istediğini soran bir oyun tasarımı yapılmıştır. Adım adım yapımına başlayalım.

Aşağıdaki gibi bir form oluşturalım.(form1) ikitane Label,Label1 Text : Süre:00:00 ve Location: 10;210Label2 Text:  Tıklama: 0 ve Location: 10;210 yazalım. Bir tanede timer ekleyelim. Interval :1000 yapalım.

Bir form daha oluşturalım(form2) bu farma hiç birşey eklemiyoruz. Form2'nin Load olayına aşağıdaki kodları ekleyelim.

private void Form2_Load(object sender, EventArgs e)
{
    Form1 fr1 = new Form1();
    fr1.ShowDialog();
    this.Close();
}

Şimdi Form1'e dönelim.

Değişkenlerimizi oluşturalım. public partial class Form1 : Form {    }  içinde static olarak değişkenlerimizi oluşturalım.

static int[] sayilar = new int[16];
static int sayac = 0;
static bool basladimi = false;
static int saniye = 0, dakika = 0;

Form1'in Load olayınada aşağıdaki kodları ekleyelim.

private void Form1_Load(object sender, EventArgs e)
{
    this.Text = "Sırala";
    //sayı tutma ---------------------------------------------
    //int[] sayilar = new int[16];
    for (int i = 0; i < 16; i++) sayilar[i] = 0;
    Random r = new Random();
    bool durum = false;//yok
    int sayac=0;
    do
    {
        int s = r.Next(1, 16);
        for (int i = 0; i < 15; i++)
        {
            if (s == sayilar[i]) {
                durum = true;//var
                break;
            }
        }

        if (durum == false)
        {
            sayilar[sayac] = s;
            sayac++;
        }
        else
            durum = false;

    } while (sayac<15);

    // for (int i = 0; i < 15; i++) label1.Text += " " + sayilar[i];


    //button ekleme ---------------------------
    this.Size = new Size(220, 275);
    int h = 0;
    for (int i = 0; i < 15; i++)
    {
        Button buton = new Button();
        buton.Name = "b" + i.ToString();
        buton.Size = new Size(50, 50);
        if (i % 4 == 0) h++;
        buton.Text = sayilar[i].ToString();
        buton.Font = new Font("arial", 14);
        buton.Location = new Point((i%4)*50,(h-1)*50);//x,y
        buton.Click += islem;//metod bağlandı
        this.Controls.Add(buton);
    }


}

islem adındaki medodu oluşturalım.

private void islem(object sender, EventArgs e)
{

    //sayacı arttırma ve label2 gösterme
    sayac++;
    label2.Text = "Tıklama: " + sayac;

    basladimi = true;
    if (basladimi == true) timer1.Enabled = true;


    int bos = -1;
    int aktif = -1;
    Button b = (Button)sender;
    int sayi = int.Parse(b.Text);

    for (int i = 0; i < 16; i++)
    {
        if (sayilar[i] == 0) bos = i;
        if (sayilar[i] == sayi) aktif = i;
    }

    if ((aktif - 1) == bos)
    {
        b.Location = new Point(b.Location.X - 50, b.Location.Y);
        sayilar[bos] = sayilar[aktif];
        sayilar[aktif] = 0;
    }
    else if ((aktif + 1) == bos)
    {
        b.Location = new Point(b.Location.X + 50, b.Location.Y);
        sayilar[bos] = sayilar[aktif];
        sayilar[aktif] = 0;
    }
    else if ((aktif - 4) == bos)
    {
        b.Location = new Point(b.Location.X, b.Location.Y - 50);
        sayilar[bos] = sayilar[aktif];
        sayilar[aktif] = 0;
    }
    else if ((aktif + 4) == bos)
    {
        b.Location = new Point(b.Location.X, b.Location.Y + 50);
        sayilar[bos] = sayilar[aktif];
        sayilar[aktif] = 0;
    }


    //kontrol -----------------------------
    bool bittimi = true;
    //sırala
    //for (int i = 0; i < 15; i++)
    //{
    //    sayilar[i] = i + 1;

    //}

    for (int i = 0; i < 15; i++)
    {
        if (!(i + 1 == sayilar[i])) { bittimi = false; break; }

    }

    if (bittimi == true)
    {
        timer1.Enabled = false;


        DialogResult tiklama = MessageBox.Show("Devam Etmek İstiyormusunuz?", "Oyun", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

        if (tiklama == DialogResult.No) { Application.Exit(); }
        if (tiklama == DialogResult.Yes)
        {
            sayac = 0;
            basladimi = false;
            saniye = 0;
            dakika = 0;

            this.Dispose();
            Form2 yeni = new Form2();
            yeni.Show();
                   


        }
    }

}

Timer'ın Tick olayına aşağıdaki kodları ekleyelim.

private void timer1_Tick(object sender, EventArgs e)
{
    saniye++;
    if (saniye==60) { dakika++;saniye = 0; }
    label1.Text = String.Format("Süre: {0:D2}:{1:D2} ",dakika, saniye);
         
}

 Hepsi bu kadar oyunu artık çalıştırabilirsiniz.

Yorum ekle

Konuyla İlgili Yazılar

windows form uygulamaları

C# ListBox Örneği

İki listbox arasında bilgi aktarma işlemi yapalım. Aktarma işleminde seçim yapılarak aktarma buttonuna tıklanarak seçilen listboxtaki silinip diğer listbox!a ekleme... devamı...