C# ile Basit Mayın Tarlası Oyunu

Bu yazıda basit bir mayın tarlası (minesweeper) oyunu geliştirilecektir.

1.Adım: Oyun Alanının Hazırlanması

Oyun alanı için 10×10 boyutlarındaki buton dizisi tanımlanıp oyun alanı(groupbox) üzerine yerleştirilmiştir.

for (int i = 0; i < 10; i++)
            {
                for (int j = 0; j < 10; j++)
                {
                    btn[i, j] = new Button();
                    btn[i, j].Width = 20;
                    btn[i, j].Height = 20;
                    btn[i, j].Name = i + "-" + j;
                    btn[i, j].Top = i * 20+30;
                    btn[i, j].Left = j * 20+30;
                    btn[i, j].Parent = groupBox1;
                    btn[i, j].Click += oyunbtn_Click;
                    mayin[i, j] = 0;
                    btn[i, j].BackgroundImage=null;
                }
            }

2.Adım:Mayınların Yerleştirilmesi

10×10 boyutlarındaki bir tam sayı dizisi tanımlanıp rastgele konumlara 10 adet 1 yerleştirilmiştir. Dizinin geri kalanına 0 değeri atanmıştır.

Random r = new Random();
            for (int i = 0; i < 10; i++)
            {
                int x = r.Next(10);
                int y = r.Next(10);
                mayin[x, y] = 1;
            }

3.Adım: Mayınların Kontrolü

Oyun içerisinde üzerine tıklanılan bir butonun öncelikle konumu belirlenip o konumda mayin olup olmadığı mayin isimli diziden kontrol edilir. Ardından mayın varsa tüm mayınlar gösterilir, eğer mayın yoksa tıklanılan butonun çevresinde bulunan mayın sayısı sayılıp tıklanılan butonun üzerine bu değer yazılır.

 int x = int.Parse(dizi[0]);
            int y = int.Parse(dizi[1]);
            if(mayin[x,y]==1)
            {
                for (int j = 0; j < 10; j++)
                {
                    for (int i = 0; i < 10; i++)
                    {
                        if (mayin[i,j]==1)
                        {
                            btn[i, j].BackgroundImage = Image.FromFile("mayin.png");
                            btn[i, j].BackgroundImageLayout = ImageLayout.Stretch;
                        }
                    }
                }
                SoundPlayer sp = new SoundPlayer();
                sp.SoundLocation = "bigboom.wav";
                sp.Play();
                mesajLbl.Text = "Kaybettiniz";
            }
            else
            {
                int mayinSayi = 0;
                if(x<9)
                {
                    if(mayin[x+1,y]==1)
                    {
                        mayinSayi++;
                    }
                }
                if (x < 9&&y<9)
                {
                    if (mayin[x + 1, y+1] == 1)
                    {
                        mayinSayi++;
                    }
                }
                if (y < 9)
                {
                    if (mayin[x, y+1] == 1)
                    {
                        mayinSayi++;
                    }
                }
                if (x >0&&y<9)
                {
                    if (mayin[x - 1, y+1] == 1)
                    {
                        mayinSayi++;
                    }
                }
                if (x>0)
                {
                    if (mayin[x - 1, y] == 1)
                    {
                        mayinSayi++;
                    }
                }
                if (x >0&&y>0)
                {
                    if (mayin[x - 1, y-1] == 1)
                    {
                        mayinSayi++;
                    }
                }
                if (y>0)
                {
                    if (mayin[x, y-1] == 1)
                    {
                        mayinSayi++;
                    }
                }
                btn[x, y].Text = mayinSayi.ToString() ;
                skor++;
                mesajLbl.Text = "Skor:" + skor;
                if(skor==90)
                {
                    mesajLbl.Text = "Kazandınız";
                }
            }

Örnek Uygulama

https://github.com/omerozcann/CSharpMayinTarlasi

Bir cevap yazın

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