/// <summary> /// aloitetaan uusi peli, eli tyhjennetään pelialueesta nappulat ja asetetaan /// oletusvärit /// </summary> public void uusiPeli() { nappulaVari = UserControl1.nappulaVariProperty.DefaultMetadata.DefaultValue.ToString(); nappulaList.Clear(); voittoAani.Stop(); foreach (UIElement child in lautaGrid.Children) { if (child is OwnCanvas) { OwnCanvas canv = (OwnCanvas)child; canv.Background = Brushes.White; foreach (UIElement lapsi in canv.Children) { if (lapsi is Myllynappula.UserControl1) { Myllynappula.UserControl1 nappula = (Myllynappula.UserControl1)lapsi; canv.Children.Remove(lapsi); foreach (UIElement lapsi2 in canv.Children) { if (lapsi2 is CheckBox) { CheckBox check = (CheckBox)lapsi2; check.IsChecked = false; } } break; } } } } }
/// <summary> /// metodi nappulan poistamiseksi canvakselta. /// Aluksi etitään poistettava nappula gridin sisältämistä canvaksista, /// sitten poistetaan kyseinen nappula, sitten etsitään checkboxi jonka päällä /// nappula oli ja unchekataan se. Lähdetään breakillä pois, jotta ei suoriteta /// turhaan foreach lauseita loppuun. /// </summary> public void removeChild() { foreach (UIElement child in lautaGrid.Children) { if (child is OwnCanvas) { OwnCanvas canv = (OwnCanvas)child; foreach (UIElement lapsi in canv.Children) { if (lapsi is Myllynappula.UserControl1) { Myllynappula.UserControl1 nappula = (Myllynappula.UserControl1)lapsi; if (nappula.onkoChecked == true) { canv.Children.Remove(lapsi); nappulaList.Remove(nappula); foreach (UIElement lapsi2 in canv.Children) { if (lapsi2 is CheckBox) { CheckBox check = (CheckBox)lapsi2; check.IsChecked = false; } } break; } } } } } }
/// <summary> /// Hoitaa toistaiseksi nappulan lisäämisen pelikentälle. Lisätään nappula /// vain sellaisille paikoille jotka ovat checked tämän clikkauksen jälkeen ja /// jotka eivät sisällä jo nappulaa. Tapahtuman pitäisi laueta vain checkboxia /// klikatessa. Varmisestaan myös, että vain yksi nappula on valittuna kerrallaan /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void lautaGrid_Click(object sender, RoutedEventArgs e) { //Tässä lisätään pelilaudalle uusi nappula ja bindataan se oikean kokoiseksi if (e.OriginalSource is CheckBox && !(e.Source is Myllynappula.UserControl1)) { CheckBox check = (CheckBox)e.OriginalSource; OwnCanvas oma = (OwnCanvas)check.Parent; if (check.IsChecked == true && saakoLisata == true) { Myllynappula.UserControl1 uusinappula = new Myllynappula.UserControl1(); uusinappula = bindNappula(oma); if (saakoSiirtaa == true) { if (onkoNappulaaChecked() == true) { foreach (Myllynappula.UserControl1 btn in nappulaList) { if (btn.onkoChecked == true) { uusinappula = btn; removeChild(); break; } } } } oma.Children.Add(uusinappula); nappulaList.Add(uusinappula); // lisätään nappulat listaan, jotta voidaan seurata lisättyjen nappuloiden checked tilaa if (nappulaList.Count == 5) { soitaAani(); } saakoLisata = false; // laitetaan false, jotta ei voida lisäillä nappuloita milloin vain saakoSiirtaa = false; } } //Tämä varmistaa, että vain yksi nappula voi olla valittuna/checkattuna kerrallaan. //Peruutetaan lisäämis tapahtuma jos painetaan Myllynappulasta if (e.Source is Myllynappula.UserControl1) { saakoLisata = false; saakoSiirtaa = false; Myllynappula.UserControl1 checkattuNappula = (Myllynappula.UserControl1)e.Source; foreach (Myllynappula.UserControl1 nappula in nappulaList) { if (!nappula.Equals(checkattuNappula)) { nappula.onkoChecked = false; } } } }
/// <summary> /// Palautetaan bindattu nappula /// </summary> /// <param name="oma"></param> /// <returns></returns> public Myllynappula.UserControl1 bindNappula(OwnCanvas oma) { Myllynappula.UserControl1 uusinappula = new Myllynappula.UserControl1(); uusinappula.nappulaColor = nappulaVari; Binding bindWidht = new Binding("HalfWidth"); bindWidht.Source = oma; bindWidht.Mode = BindingMode.OneWay; bindWidht.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; uusinappula.SetBinding(WidthProperty, bindWidht); Binding bindHeight = new Binding("HalfHeight"); bindHeight.Source = oma; bindHeight.Mode = BindingMode.OneWay; bindHeight.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; uusinappula.SetBinding(HeightProperty, bindHeight); Binding bindCanvTop = new Binding("OneFourthsHeight"); bindCanvTop.Source = oma; bindCanvTop.Mode = BindingMode.OneWay; bindCanvTop.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; uusinappula.SetBinding(Canvas.TopProperty, bindCanvTop); Binding bindCanvLeft = new Binding("OneFourthsWidth"); bindCanvLeft.Source = oma; bindCanvLeft.Mode = BindingMode.OneWay; bindCanvLeft.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; uusinappula.SetBinding(Canvas.LeftProperty, bindCanvLeft); return(uusinappula); }