/// <summary> /// Tarkistetaan nappulan liikutus tammi-pelissä. /// </summary> /// <param name="nappula"></param> private void TarkistaLiikutusTammi(Pelinappula nappula) { rowKlikkaus = pelikentta.GetRow(); if (nappula.OnkoValittu()) { /// AUTOMAATTILIIKUTUS bool liikutettu = TarkistaMahdollisetLiikutukset(nappula); if (liikutettu == true) return; if (nappula.GetPelaaja() == 1) { if (nappula.GetTammi()) { if (Grid.GetRow(nappula) - rowKlikkaus == 1) { liikuttuEriSuuntaan = true; OnkoRuudussaNappula(-1, 1, -1, 2, 1, nappula); } else { OnkoRuudussaNappula(1, 1, -1, 2, 1, nappula); } } else { OnkoRuudussaNappula(1, 1, -1, 2, 1, nappula); } } if (nappula.GetPelaaja() == 2) { if (nappula.GetTammi()) { if (Grid.GetRow(nappula) - rowKlikkaus == -1) { liikuttuEriSuuntaan = true; OnkoRuudussaNappula(1, 1, -1, 1, 2, nappula); } else { OnkoRuudussaNappula(-1, 1, -1, 1, 2, nappula); } } else { // Siirryttävät ruudut ja pelaajat OnkoRuudussaNappula(-1, 1, -1, 1, 2, nappula); } } } }
/// <summary> /// Siirretään valittua nappulaan ruutuun jota klikataan ja syödään nappula /// tarvittaessa. (Pelilogiikka) /// </summary> /// <param name="nappula"></param> private void TarkistaLiikutusBreakthrough(Pelinappula nappula) { if (nappula.OnkoValittu()) { // otetaan int-muuttujiin tiedot nappulan sijainnista ja klikkauksen sijainnista int rowKlikkaus = pelikentta.GetRow(); int columnKlikkaus = pelikentta.GetColumn(); int columnNappula = Grid.GetColumn(nappula); int rowNappula = Grid.GetRow(nappula); // Tarkistetaan kumman puolen nappulaa ollaan siirtämässä. TODO: REFAKTOROI samat koodit!!!! if (nappula.GetPelaaja() == 1) { // Katsotaan täyttyvätkö siirtoehdot if ((rowKlikkaus - rowNappula) == 1 && ((columnKlikkaus - columnNappula) == 1 || (columnKlikkaus - columnNappula) == 0 || (columnKlikkaus - columnNappula) == -1)) { // Käydään läpi nappulat, että tiedetään syökö nappula toisen nappulan tai onko ruudussa jo oma nappula. foreach (Pelinappula nappula1 in lista) { // Tarkistetaan onko ruudussa johon liikutaan vastustajan nappula if (Grid.GetRow(nappula1) == rowKlikkaus && Grid.GetColumn(nappula1) == columnKlikkaus && nappula1.GetPelaaja() == 2) { if (columnKlikkaus - columnNappula == 0) { pelikentta.VarjaaPunaiseksi(columnKlikkaus, rowKlikkaus, ruudukko1VariMuisti, ruudukko2VariMuisti); return; }// Ei voida syödä jos nappula kohtisuorassa. pelikentta.myGrid.Children.Remove(nappula1); // Ainakin väliaikainen ratkaisu nappulan poistoon gridiltä. Grid.SetColumn(nappula1, 200); Grid.SetRow(nappula1, 200); nappula1.Syoty(true); soiko = true; } // Lopetetaan jos siirryttävässä ruudussa on jo oma nappula. if ((Grid.GetRow(nappula1) == rowKlikkaus) && (Grid.GetColumn(nappula1) == columnKlikkaus) && (nappula1.GetPelaaja() == 1)) { pelikentta.VarjaaPunaiseksi(columnKlikkaus, rowKlikkaus, ruudukko1VariMuisti, ruudukko2VariMuisti); return; } } KirjoitaMuistiin(columnKlikkaus, rowKlikkaus, nappula); // Jos päästään tänne, voidaan siirtää valittu nappula klikattavaan kohtaan. Grid.SetColumn(nappula, columnKlikkaus); Grid.SetRow(nappula, rowKlikkaus); varjataanko = false; // Jos klikkaus oli vastustajan päädyssä voittaa pelin if (rowKlikkaus == pelikentta.GetPelikentanKoko() - 1) { nappula.Voitti(); LopetaPeli(); IlmoitaVoittaja(pelaaja1 + " voitti!"); return; } pelikentta.VaihdaVuoro(); PoistaValinta(); } if (rowKlikkaus != rowNappula || columnKlikkaus != columnNappula) { if (varjataanko == true) { pelikentta.VarjaaPunaiseksi(columnKlikkaus, rowKlikkaus, ruudukko1VariMuisti, ruudukko2VariMuisti); varjataanko = true; } } } // Tarkistetaan kumman puolen nappulaa ollaan siirtämässä. TODO: REFAKTOROI samat koodit!!!! if (nappula.GetPelaaja() == 2) { // Tarkistetaan täyttyvätkö siirtoehdot, ei voi liikkua ihan minne tahansa if ((rowKlikkaus - rowNappula) == -1 && ((columnKlikkaus - columnNappula) == 0 || (columnKlikkaus - columnNappula) == -1 || (columnKlikkaus - columnNappula) == 1)) { // Käydään läpi nappulat, että tiedetään syökö nappula toisen nappulan tai onko ruudussa jo oma nappula. foreach (Pelinappula nappula1 in lista) { // Tarkistetaan onko ruudussa johon liikutaan vastustajan nappula if (Grid.GetRow(nappula1) == rowKlikkaus && Grid.GetColumn(nappula1) == columnKlikkaus && nappula1.GetPelaaja() == 1) { if (columnKlikkaus - columnNappula == 0) { pelikentta.VarjaaPunaiseksi(columnKlikkaus, rowKlikkaus, ruudukko1VariMuisti, ruudukko2VariMuisti); return; } pelikentta.myGrid.Children.Remove(nappula1); // Ainakin väliaikainen ratkaisu nappulan poistoon gridiltä. Grid.SetColumn(nappula1, 200); Grid.SetRow(nappula1, 200); nappula1.Syoty(true); soiko = true; } // Lopetetaan jos siirryttävässä ruudussa on jo oma nappula. if ((Grid.GetRow(nappula1) == rowKlikkaus) && (Grid.GetColumn(nappula1) == columnKlikkaus) && (nappula1.GetPelaaja() == 2) && (nappula1.OnkoSyoty() == false)) { pelikentta.VarjaaPunaiseksi(columnKlikkaus, rowKlikkaus, ruudukko1VariMuisti, ruudukko2VariMuisti); return; } } // Jos päästään tänne, voidaan siirtää valittu nappula klikattavaan kohtaan. KirjoitaMuistiin(columnKlikkaus, rowKlikkaus, nappula); Grid.SetColumn(nappula, columnKlikkaus); Grid.SetRow(nappula, rowKlikkaus); varjataanko = false; if (rowKlikkaus == 0) { nappula.Voitti(); LopetaPeli(); IlmoitaVoittaja(pelaaja2 + " voitti!"); return; } pelikentta.VaihdaVuoro(); PoistaValinta(); } if (rowKlikkaus != rowNappula || columnKlikkaus != columnNappula) { if (varjataanko == true) { pelikentta.VarjaaPunaiseksi(columnKlikkaus, rowKlikkaus, ruudukko1VariMuisti, ruudukko2VariMuisti); varjataanko = true; } } } } }