using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
namespace mayinTarlasiForm
{
public partial class MayınTarlası : Form
{
private System.Windows.Forms.PictureBox pictureBox_MayınTarlası;
private System.Windows.Forms.Label label_kalanmayın;
private System.Windows.Forms.Button button_YeniOyun;
private System.Windows.Forms.MenuStrip menuStrip1;
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1;
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem3;
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem4;
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem5;
public MayınTarlası()
{
InitializeMyComponent();
}
private **** MayınTarlasıOlustur()
{
//Mayın tarlasını oluştur
if (Mayın.bmp != null)
{
Mayın.MayınRengi = Brushes.Red;
Mayın.ArkaPlan = Brushes.Blue;
Mayın.ButonRengi = Brushes.White;
}
//mayın tarlası mayın sayısı sıfır ise 40 yap (minimum değer)
if (Mayın.OyunMayınSayısı == 0)
Mayın.OyunMayınSayısı = 40;
pictureBox_MayınTarlası.Visible = false;
Mayın.MayınYerleştir(); // mayınları yerleştirme
Mayın.MayınTarlasınıDoldur(); // arka plan mayınları yerleştirme
pictureBox_MayınTarlası.Image = Mayın.bmp;
pictureBox_MayınTarlası.*******();
int satir = 0, sutun = 0;
Mayın.KalanMayınSayısı = Mayın.MayınSayısı;
Mayın.TespitEdilenMayınSayısı = 0; // kalan mayın sayısını hesaplamak için
label_kalanmayın.Text = "Kalan Mayın Sayısı :" + Mayın.KalanMayınSayısı.ToString();
//mayın tarlası butonlarını dinamik olarak oluşturma
for (int i = 0; i < 400; i++)
{
if (i % 20 == 0 && i != 0)
{
satir++;
sutun = 0;
}
Button tb = new Button();// buton örneği oluşturma
//Mayin tarlası, butonun özelliklerini atama
tb.Name = i.ToString();
tb.TabIndex = i;
tb.TabStop = false;
tb.Text = "";
tb.Size = new System.Drawing.Size(20, 20);
Point p = new System.Drawing.Point(sutun * tb.Width + 20, satir * tb.Height + 20);
tb.******** = p;
tb.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
tb.Visible = true;
tb.BackColor = Color.Gray;
tb.BringToFront();
tb.MouseDown += new MouseEventHandler(this.butonlarClick);
pictureBox_MayınTarlası.Controls.Add(tb);
this.AutoSize = true;
Mayın.Butonlar.Add(tb); //oluşan buton hafızaya al
sutun++;
}
pictureBox_MayınTarlası.Visible = true;
pictureBox_MayınTarlası.Size = new Size(440, 440);
Mayın.LineCiz(); //mayın tarlası butonların yerleşeceği tabloyu çizme
}
private **** butonlarClick(object sender, System.Windows.Forms.MouseEventArgs e)
{
//Mayın tarlası butonlarından biri tıklandığında oluşacak olay metodu
Button BasılanButon = (Button)sender;
if (BasılanButon.BackColor == Color.Gray)
if (e.Button == MouseButtons.Left)
{
BasılanButon.Visible = false;
if (Mayın.MayınVarMı(BasılanButon.********.X, BasılanButon.********.Y))
{
for (int i = 0; i < Mayın.OyunMayınSayısı; i++)
((Button)Mayın.Butonlar[Mayın.MayınYerleri]).Visible = false;
MessageBox.Show("Oyun Bitti");
for (int i = 0; i < 400; i++)
((Button)Mayın.Butonlar).Enabled = false;
}
else
{
if (Mayın.EtiketKoy(BasılanButon) != "0")
pictureBox_MayınTarlası.Controls.Add(Mayın.label_buton);
}
if (Mayın.EtiketKoy(BasılanButon) == "0")
{
BosYerleriAc(BasılanButon);
int i = 0;
while (Mayın.BakılanButonlar.Count - i > 0)
{
if (Mayın.EtiketKoy((Button)Mayın.BakılanButonlar) == "0")
BosYerleriAc((Button)Mayın.BakılanButonlar);
else
pictureBox_MayınTarlası.Controls.Add(Mayın.label_buton);
i++;
}
for (int a = 0; a < Mayın.BakılanButonlar.Count; a++)
((Button)Mayın.BakılanButonlar[a]).Visible = false;
}
}
if (e.Button == MouseButtons.Right)
{
if (((Button)Mayın.Butonlar[int.Parse(BasılanButon.Name)]).BackColor == Color.Gray)
{
((Button)Mayın.Butonlar[int.Parse(BasılanButon.Name)]).BackColor = Color.GreenYellow;
Mayın.KalanMayınSayısı--;
for (int i = 0; i < Mayın.MayınSayısı; i++)
if (((Button)Mayın.Butonlar[int.Parse(BasılanButon.Name)]).Name == Mayın.MayınYerleri.ToString())
Mayın.TespitEdilenMayınSayısı++;
}
else
{
((Button)Mayın.Butonlar[int.Parse(BasılanButon.Name)]).BackColor = Color.Gray;
Mayın.KalanMayınSayısı++;
for (int i = 0; i < Mayın.MayınSayısı; i++)
if (((Button)Mayın.Butonlar[int.Parse(BasılanButon.Name)]).Name == Mayın.MayınYerleri.ToString())
Mayın.TespitEdilenMayınSayısı--;
}
}
label_kalanmayın.Text = "Kalan Mayın Sayısı :" + Mayın.KalanMayınSayısı.ToString();
Mayın.LineCiz();
if (Mayın.TespitEdilenMayınSayısı == Mayın.MayınSayısı)
{
MessageBox.Show("Oyunu Kazandınız. Tebrikler.");
for (int i = 0; i < 400; i++)
((Button)Mayın.Butonlar).Enabled = false;
}
}
private **** BosYerleriAc(Button ArananButon)
{
bool varmı = false;
int x = ArananButon.********.X, y = ArananButon.********.Y;
if (x <= 400 && x >= 20 && y <= 400 && y >= 20)
{
if (x > 20)
{
for (int b = 0; b < Mayın.BakılanButonlar.Count; b++)
if ((Button)Mayın.Butonlar[int.Parse(ArananButon.Name) - 1] == (Button)Mayın.BakılanButonlar)
varmı = true;
if (!varmı)
Mayın.BakılanButonlar.Add((Button)Mayın.Butonlar[int.Parse(ArananButon.Name) - 1]);
}
varmı = false;
if (x < 400)
{
for (int b = 0; b < Mayın.BakılanButonlar.Count; b++)
if (int.Parse(ArananButon.Name) + 1 == int.Parse(((Button)Mayın.BakılanButonlar).Name))
varmı = true;
if (!varmı)
Mayın.BakılanButonlar.Add(((Button)Mayın.Butonlar[int.Parse(ArananButon.Name) + 1]));
}
varmı = false;
if (x > 20 && y > 20)
{
for (int b = 0; b < Mayın.BakılanButonlar.Count; b++)
if ((Button)Mayın.Butonlar[int.Parse(ArananButon.Name) - 21] == (Button)Mayın.BakılanButonlar)
varmı = true;
if (!varmı)
Mayın.BakılanButonlar.Add(((Button)Mayın.Butonlar[int.Parse(ArananButon.Name) - 21]));
}
varmı = false;
if (x < 400 && y > 20)
{
for (int b = 0; b < Mayın.BakılanButonlar.Count; b++)
if ((Button)Mayın.Butonlar[int.Parse(ArananButon.Name) - 19] == (Button)Mayın.BakılanButonlar)
varmı = true;
if (!varmı)
Mayın.BakılanButonlar.Add(((Button)Mayın.Butonlar[int.Parse(ArananButon.Name) - 19]));
}
varmı = false;
if (y > 20)
{
for (int b = 0; b < Mayın.BakılanButonlar.Count; b++)
if ((Button)Mayın.Butonlar[int.Parse(ArananButon.Name) - 20] == (Button)Mayın.BakılanButonlar)
varmı = true;
if (!varmı)
Mayın.BakılanButonlar.Add(((Button)Mayın.Butonlar[int.Parse(ArananButon.Name) - 20]));
}
varmı = false;
if (y < 400)
{
for (int b = 0; b < Mayın.BakılanButonlar.Count; b++)
if ((Button)Mayın.Butonlar[int.Parse(ArananButon.Name) + 20] == (Button)Mayın.BakılanButonlar)
varmı = true;
if (!varmı)
Mayın.BakılanButonlar.Add(((Button)Mayın.Butonlar[int.Parse(ArananButon.Name) + 20]));
}
varmı = false;
if (x > 20 && y < 400)
{
for (int b = 0; b < Mayın.BakılanButonlar.Count; b++)
if ((Button)Mayın.Butonlar[int.Parse(ArananButon.Name) + 19] == (Button)Mayın.BakılanButonlar)
varmı = true;
if (!varmı)
Mayın.BakılanButonlar.Add(((Button)Mayın.Butonlar[int.Parse(ArananButon.Name) + 19]));
}
varmı = false;
if (x < 400 && y < 400)
{
for (int b = 0; b < Mayın.BakılanButonlar.Count; b++)
if ((Button)Mayın.Butonlar[int.Parse(ArananButon.Name) + 21] == (Button)Mayın.BakılanButonlar)
varmı = true;
if (!varmı)
Mayın.BakılanButonlar.Add(((Button)Mayın.Butonlar[int.Parse(ArananButon.Name) + 21]));
}
}
}
private **** button_YeniOyun_Click(object sender, EventArgs e)
{
// yeni mayın tarlası oyunu için tabloyu temizle
Temizle();
//yeni mayın tarlası oyunu için yeni tablo oluştur
MayınTarlasıOlustur();
}
private **** Temizle()
{
// tabloyu temizleme metodu, bütün özellikleri temizler
Mayın.Butonlar.Clear();
Mayın.BakılanButonlar.Clear();
pictureBox_MayınTarlası.Controls.Clear();
Mayın.gfx.FillRectangle(System.Drawing.Brushes.Blue, Mayın.rect);
pictureBox_MayınTarlası.Image = Mayın.bmp;
pictureBox_MayınTarlası.*******();
Mayın.MayınSayısı = 0;
}
private **** MayınTarlası_Load(object sender, EventArgs e)
{
// Mayın tarlası formu açılırken oyunu başlatma
Mayın.Load_MayınTarlası();
// mayın tarlasını oluşturma
MayınTarlasıOlustur();
}
private **** toolStripMenuItem4_Click(object sender, EventArgs e)
{
Mayın.OyunMayınSayısı = 80;
Temizle();
MayınTarlasıOlustur();
}
private **** toolStripMenuItem3_Click(object sender, EventArgs e)
{
Mayın.OyunMayınSayısı = 40;
Temizle();
MayınTarlasıOlustur();
}
private **** toolStripMenuItem5_Click(object sender, EventArgs e)
{
Mayın.OyunMayınSayısı = 100;
Temizle();
MayınTarlasıOlustur();
}
private **** InitializeMyComponent()
{
// C sharp mayın tarlası oyun da kullanılacak kontrollerin özelliklerini atama
this.pictureBox_MayınTarlası = new System.Windows.Forms.PictureBox();
this.label_kalanmayın = new System.Windows.Forms.Label();
this.button_YeniOyun = new System.Windows.Forms.Button();
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripMenuItem();
((System.ComponentModel.ISupportInitialize)(this.pictureBox_MayınTarlası)).BeginInit();
this.menuStrip1.SuspendLayout();
this.SuspendLayout();
//
// pictureBox_MayınTarlası
//
this.pictureBox_MayınTarlası.******** = new System.Drawing.Point(25, 88);
this.pictureBox_MayınTarlası.Name = "pictureBox_MayınTarlası";
this.pictureBox_MayınTarlası.Size = new System.Drawing.Size(440, 416);
this.pictureBox_MayınTarlası.TabIndex = 0;
this.pictureBox_MayınTarlası.TabStop = false;
//
// label_kalanmayın
//
this.label_kalanmayın.AutoSize = true;
this.label_kalanmayın.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.label_kalanmayın.******** = new System.Drawing.Point(342, 47);
this.label_kalanmayın.Name = "label_kalanmayın";
this.label_kalanmayın.Size = new System.Drawing.Size(37, 15);
this.label_kalanmayın.TabIndex = 1;
this.label_kalanmayın.Text = "label1";
//
// button_YeniOyun
//
this.button_YeniOyun.AccessibleRole = System.Windows.Forms.AccessibleRole.None;
this.button_YeniOyun.Enabled = false;
this.button_YeniOyun.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button_YeniOyun.******** = new System.Drawing.Point(25, 42);
this.button_YeniOyun.Name = "button_YeniOyun";
this.button_YeniOyun.Size = new System.Drawing.Size(294, 23);
this.button_YeniOyun.TabIndex = 2;
this.button_YeniOyun.TabStop = false;
this.button_YeniOyun.Text = "Yeni Oyun Başlat";
this.button_YeniOyun.UseVisualStyleBackColor = true;
this.button_YeniOyun.Click += new System.EventHandler(this.button_YeniOyun_Click);
//
// menuStrip1
//
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripMenuItem1});
this.menuStrip1.******** = new System.Drawing.Point(0, 0);
this.menuStrip1.Name = "menuStrip1";
this.menuStrip1.Size = new System.Drawing.Size(492, 24);
this.menuStrip1.TabIndex = 3;
this.menuStrip1.Text = "menuStrip1";
//
// toolStripMenuItem1
//
this.toolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripMenuItem3,
this.toolStripMenuItem4,
this.toolStripMenuItem5});
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
this.toolStripMenuItem1.Size = new System.Drawing.Size(77, 20);
this.toolStripMenuItem1.Text = "Mayın Sayısı";
//
// toolStripMenuItem3
//
this.toolStripMenuItem3.Name = "toolStripMenuItem3";
this.toolStripMenuItem3.Size = new System.Drawing.Size(103, 22);
this.toolStripMenuItem3.Text = "40";
this.toolStripMenuItem3.Click += new System.EventHandler(this.toolStripMenuItem3_Click);
//
// toolStripMenuItem4
//
this.toolStripMenuItem4.Name = "toolStripMenuItem4";
this.toolStripMenuItem4.Size = new System.Drawing.Size(103, 22);
this.toolStripMenuItem4.Text = "80";
this.toolStripMenuItem4.Click += new System.EventHandler(this.toolStripMenuItem4_Click);
//
// toolStripMenuItem5
//
this.toolStripMenuItem5.Name = "toolStripMenuItem5";
this.toolStripMenuItem5.Size = new System.Drawing.Size(103, 22);
this.toolStripMenuItem5.Text = "100";
this.toolStripMenuItem5.Click += new System.EventHandler(this.toolStripMenuItem5_Click);
//
// MayınTarlası
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(492, 516);
this.Controls.Add(this.button_YeniOyun);
this.Controls.Add(this.label_kalanmayın);
this.Controls.Add(this.pictureBox_MayınTarlası);
this.Controls.Add(this.menuStrip1);
this.MainMenuStrip = this.menuStrip1;
this.Name = "Mayın-Tarlası";
this.Text = "Mayın Tarlası";
this.Load += new System.EventHandler(this.MayınTarlası_Load);
((System.ComponentModel.ISupportInitialize)(this.pictureBox_MayınTarlası)).EndInit();
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
}
class Mayın
{
//Mayın oyunu çalıştıracak mayın tarlası sınıfı özellikleri ve metotları
public static int[] MayınYerleri = new int[1000];
public static ArrayList Butonlar = new ArrayList();
public static ArrayList BakılanButonlar = new ArrayList();
public static Label label_buton;
public static System.Drawing.Bitmap bmp;
public static System.Drawing.Graphics gfx;
public static System.Drawing.Rectangle rect;
public static System.Drawing.Brush MayınRengi;
public static System.Drawing.Brush ButonRengi;
public static System.Drawing.Brush ArkaPlan;
public static Graphics cizgili;
public static int MayınSayısı;
public static int TespitEdilenMayınSayısı;
public static int KalanMayınSayısı;
public static int OyunMayınSayısı;
public static **** MayınYerleştir()
{
bool aynı = false;
Random r = new Random();
for (int i = 0; i < OyunMayınSayısı; i++)
{
MayınYerleri = r.Next(400);
MayınSayısı++;
for (int j = 1; j < MayınSayısı; j++)
{
if (MayınYerleri == MayınYerleri[j - 1])
{
MayınSayısı--;
aynı = true;
}
}
if (aynı)
{
i--;
aynı = false;
}
}
}
public static **** Fill_Mayın(int x, int y)
{
//arka plan mayınları oluştur
gfx.FillRectangle(MayınRengi, x * 20 + 20, y * 20 + 20, 20, 20);
}
public static int Find_EtrafındakiMayınSayısı(int x, int y)
{
// tıklanan butonun etrafında bulunan mayın sayısını hesaplama
int ToplamMayınSayısı = 0;
try
{
if (bmp.GetPixel(x + 10, y + 10) != bmp.GetPixel(x - 10, y + 10))
ToplamMayınSayısı++;
if (bmp.GetPixel(x + 10, y + 10) != bmp.GetPixel(x + 30, y + 10))
ToplamMayınSayısı++;
if (bmp.GetPixel(x + 10, y + 10) != bmp.GetPixel(x + 10, y - 10))
ToplamMayınSayısı++;
if (bmp.GetPixel(x + 10, y + 10) != bmp.GetPixel(x + 10, y + 30))
ToplamMayınSayısı++;
if (bmp.GetPixel(x + 10, y + 10) != bmp.GetPixel(x - 10, y - 10))
ToplamMayınSayısı++;
if (bmp.GetPixel(x + 10, y + 10) != bmp.GetPixel(x - 10, y + 30))
ToplamMayınSayısı++;
if (bmp.GetPixel(x + 10, y + 10) != bmp.GetPixel(x + 30, y - 10))
ToplamMayınSayısı++;
if (bmp.GetPixel(x + 10, y + 10) != bmp.GetPixel(x + 30, y + 30))
ToplamMayınSayısı++;
}
catch (Exception e) { string str = e.Message.ToString(); }
return ToplamMayınSayısı;
}
public static bool MayınVarMı(int x, int y)
{
//tıklanan yerde mayın var mı
if (bmp.GetPixel(x + 10, y + 10) == bmp.GetPixel((MayınYerleri[0] % 20) * 20 + 30, (MayınYerleri[0] / 20) * 20 + 30))
return true;
else
return false;
}
public static string EtiketKoy(Button ArananButon)
{
//Mayın yoksa açılan butonun yerine etrafındaki mayın sayısını gösteren yazıyı yaz
label_buton = new Label();
Point p = new Point(ArananButon.********.X + 1, ArananButon.********.Y + 1);
label_buton.******** = p;
label_buton.Size = new System.Drawing.Size(18, 18);
label_buton.Visible = true;
label_buton.BackColor = Color.Blue;
label_buton.TextAlign = ContentAlignment.MiddleCenter;
label_buton.Text = Mayın.Find_EtrafındakiMayınSayısı(ArananButon.********.X, ArananButon.********.Y).ToString();
return label_buton.Text;
}
public static **** LineCiz()
{
//Mayın tarlasının arka planını çizme
Pen kalem = new Pen(Color.Black, 1);
cizgili = Graphics.FromImage(bmp);
for (int i = 0; i < 21; i++)
{
cizgili.DrawLine(kalem, 20, 20 * i + 20, 420, 20 * i + 20);
cizgili.DrawLine(kalem, 20 * i + 20, 20, 20 * i + 20, 420);
}
}
}
}