/////////////////////////////////////////////////////////////////// // Sağ tıklama uyarı işaret koymak için private void BtnSagTik(object sender, MouseEventArgs e) { GameMineButton btn = (GameMineButton)sender; if (btn.Text != "") { return; } if (e.Button == MouseButtons.Right) { if (btn.BackgroundImage == null) { btn.BackgroundImage = _btnGameStepImg; btn.BackColor = btnGameStep_BackColor; btn.FlatAppearance.BorderColor = btnGameNum_BorderColor; } else { btn.BackgroundImage = null; btn.BackColor = btnGameDefault_BackColor; btn.FlatAppearance.BorderColor = btnGameDefault_BorderColor; } } }
/////////////////////////////////////////////////////////////////// private void BtnSolTik(object sender, EventArgs e) { GameMineButton btn = (GameMineButton)sender; // Buton sağ tık ile kilitlendiyse sol tıklanamasın. if (btn.Enabled == false || btn.BackgroundImage != null) { return; } //Bombaya tıklanınca if (btn.Tag.ToString() == "9") { BtnMayinliHepsiniAc(); //MessageBox.Show("Oyunu kaybettin!"); return; } // Boş butonları ve çevre rakamları açıyor else if (btn.Tag.ToString() == "0") { btn.Enabled = false; int[] cord = btn.Name.Split(',').Select(Int32.Parse).ToArray(); int cord1 = cord[0]; int cord2 = cord[1]; btn.FlatAppearance.BorderColor = btnGameClean_BorderColor; btn.BackColor = btnGameClean_BackColor; this.AcilmamisMayinsizButon--; // Boşları aç BtnBosDegerAc(cord1 + 1, cord2); BtnBosDegerAc(cord1 - 1, cord2); BtnBosDegerAc(cord1, cord2 + 1); BtnBosDegerAc(cord1, cord2 - 1); // Boşların çevresindeki rakamları aç BtnBosCevresindekiRakamlariAc(cord1 + 1, cord2 + 1); BtnBosCevresindekiRakamlariAc(cord1 - 1, cord2 - 1); BtnBosCevresindekiRakamlariAc(cord1 + 1, cord2 - 1); BtnBosCevresindekiRakamlariAc(cord1 - 1, cord2 + 1); BtnBosCevresindekiRakamlariAc(cord1 + 1, cord2); BtnBosCevresindekiRakamlariAc(cord1 - 1, cord2); BtnBosCevresindekiRakamlariAc(cord1, cord2 - 1); BtnBosCevresindekiRakamlariAc(cord1, cord2 + 1); return; } // Numaralı butonları açıyor else if (btn.Tag.ToString() != "0" && btn.Tag.ToString() != "9") { btn.Text = btn.Tag.ToString(); btn.Enabled = false; btn.BackColor = btnGameNum_BackColor; btn.ForeColor = btnGameNum_ForeColor; btn.FlatAppearance.BorderColor = btnGameNum_BorderColor; // Skor puanlama skor += (int)btn.Tag + 2; this.AcilmamisMayinsizButon--; } }
/////////////////////////////////////////////////////////////////// // Ramde bir adet buton heap kısmına uluşturulur // GameMineButton sınıfı Prototype desenini üzerinde taşır // Daha sonra oluşturulcak butonlar bu butondan deep copy yöntemiyle oluşturulur. private void CreateGameButton() { _btn = new GameMineButton(); _btn.Font = _btnFont; _btn.Size = _btnSize; _btn.Margin = _btnMargin; _btn.Padding = _btnPadding; _btn.TabStop = false; _btn.TabIndex = 10; _btn.Enabled = true; _btn.FlatStyle = FlatStyle.Flat; _btn.BackColor = btnGameDefault_BackColor; _btn.FlatAppearance.BorderColor = btnGameDefault_BorderColor; _btn.BackgroundImageLayout = ImageLayout.Stretch; }
/////////////////////////////////////////////////////////////////// /// <summary> /// ikili dizi ile bir matris oluşturup kordinatları verildiğinde, /// buton bilgileri işlenir ve ilgili kordinata panel içinde konumlandırılır. /// Prototype Tasarım Deseni kullanılarak, butonlar "new" ile değil "deep copy" yöntemiyle üretilir. /// </summary> /// <param name="matrisMap">MatrisField sınıfında oluşturulan diziyi alır</param> /// <param name="cord_X">Dizinin x indisi arr[x,y]</param> /// <param name="cord_Y">Dizinin y indisi arr[x,y]</param> /// <param name="pnlPlatform">AnaForm'da oluşturulan panelin referansı</param> /// <returns>Dictonary listesine eklemek için Buton nesnesi geri döndürür</returns> private GameMineButton DinamikButonOlustur(int[,] matrisMap, int cord_X, int cord_Y, ref Panel pnlPlatform) { GameMineButton btn = (GameMineButton)_btn.Clone(); btn.Tag = matrisMap[cord_X, cord_Y]; btn.Name = $"{cord_X},{cord_Y}"; // Kordinatlar isimlerden yakalanıyor _Point.X = (cord_X * (btn.Height + 2)); _Point.Y = (cord_Y * (btn.Width + 2)); btn.Location = _Point; btn.Click += btnClickHandler; btn.MouseUp += btnSagClickHandler; btn.FlatAppearance.BorderColor = btnGameDefault_BorderColor; pnlPlatform.Controls.Add(btn); return(btn); }
public IPrototype Clone(object val = null) { GameMineButton copyButton = Activator.CreateInstance <GameMineButton>(); //önce GameMineButton Bir instance oluşturulur. PropertyInfo[] piList = this.GetType() //mevcut içerinde bulunduğumuz sınıfın property leri çekilir. .GetProperties(); //mevcut property' lerden kopyalanmak istenen property ler belirtilir. Ancak bu örnekte hepsine gerek yoktur. //çünkü zaten oluşturuduğumuz copy sınıfının default değerleri içerisinde bulunduğumuz sınıf tarafından değiştirilmemektedir. //uygulama gereksinimine göre hepsi de kopyalanabilir. List <string> lst = new List <string> { "Font", "FlatStyle", "Size", "BackColor", "Margin", "BackgroundImage", "Padding", "Text", "TabStop", "ForeColor", "TabIndex", "Paint", "Enabled", "Tag", "BackgroundImageLayout" }; foreach (PropertyInfo pi in piList.Where(i => lst.Contains(i.Name))) //içerisinde bulunduğumuz sınıfın propertyleri içerisinde dönülmeye başlanır. { if (pi.GetValue(copyButton, null) != pi.GetValue(this, null)) //sırayla yeni copy nesnemize atanır. { if (pi.CanWrite) { pi.SetValue(copyButton, pi.GetValue(this, null), null); } } } return(copyButton); }