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