/// <summary> /// Kaikkien nappuloiden liikuttamiseen käytetty alihojelma. /// </summary> /// <param name="nappula">Liikutettava nappula</param> /// <param name="columnKlikkaus">Column johon ollaan siirtämässä</param> /// <param name="rowKlikkaus">Row johon ollaan siirtämässä</param> private void LiikutaNappulaa(Pelinappula nappula, int columnKlikkaus, int rowKlikkaus) { luovutus.IsEnabled = true; KirjoitaMuistiin(columnKlikkaus, rowKlikkaus, nappula); Grid.SetColumn(nappula, columnKlikkaus); Grid.SetRow(nappula, rowKlikkaus); if (!nappula.GetTammi()) TarkistaMuuttuukoTammeksi(nappula); if (soiko == true) { if (OnkoSyotavia(nappula)) { } else { pelikentta.VaihdaVuoro(); PoistaValinta(); } } else { pelikentta.VaihdaVuoro(); PoistaValinta(); } soiko = false; }
/// <summary> /// Tarkisetaan syönnin jälkeen voiko nappula syödä lisää, jos voi niin /// jätetään vuoro syöjälle jotta voi syödä lisää. /// </summary> /// <param name="nappula"></param> /// <returns></returns> private bool OnkoSyotavia(Pelinappula nappula) { int mahdollisetSiirrot = 0; // Pelaajan 1 syöminen if (nappula.GetPelaaja() == 1 && !nappula.GetTammi() && Grid.GetRow(nappula) < pelikentta.GetPelikentanKoko() - 2) { foreach (Pelinappula nappula1 in lista) { if (Grid.GetRow(nappula1) == Grid.GetRow(nappula) + 1 && Grid.GetColumn(nappula1) == Grid.GetColumn(nappula) + 1 && nappula1.GetPelaaja() == 2 && Grid.GetColumn(nappula) < pelikentta.GetPelikentanKoko() - 2) { if (TarkistaOnkoRuutuTyhjaAutomaatti(Grid.GetColumn(nappula) + 2, Grid.GetRow(nappula) + 2, false)) { mahdollisetSiirrot++; } } if (Grid.GetRow(nappula1) == Grid.GetRow(nappula) + 1 && Grid.GetColumn(nappula1) == Grid.GetColumn(nappula) - 1 && nappula1.GetPelaaja() == 2 && Grid.GetColumn(nappula) > 1) { if (TarkistaOnkoRuutuTyhjaAutomaatti(Grid.GetColumn(nappula) - 2, Grid.GetRow(nappula) + 2, false)) { mahdollisetSiirrot++; } } } } // Pelaajan 2 syöminen if (nappula.GetPelaaja() == 2 && !nappula.GetTammi() && Grid.GetRow(nappula) > 1) { foreach (Pelinappula nappula1 in lista) { if (Grid.GetRow(nappula1) == Grid.GetRow(nappula) - 1 && Grid.GetColumn(nappula1) == Grid.GetColumn(nappula) + 1 && nappula1.GetPelaaja() == 1 && Grid.GetColumn(nappula) < pelikentta.GetPelikentanKoko() - 2) { if (TarkistaOnkoRuutuTyhjaAutomaatti(Grid.GetColumn(nappula) + 2, Grid.GetRow(nappula) - 2, false)) { mahdollisetSiirrot++; } } if (Grid.GetRow(nappula1) == Grid.GetRow(nappula) - 1 && Grid.GetColumn(nappula1) == Grid.GetColumn(nappula) - 1 && nappula1.GetPelaaja() == 1 && Grid.GetColumn(nappula) > 1) { if (TarkistaOnkoRuutuTyhjaAutomaatti(Grid.GetColumn(nappula) - 2, Grid.GetRow(nappula) - 2, false)) { mahdollisetSiirrot++; } } } } if (nappula.GetTammi()) { if (nappula.GetPelaaja() == 1) return OnkoSyotaviaTammi(nappula, 2); else return OnkoSyotaviaTammi(nappula, 1); } if (mahdollisetSiirrot != 0) { return true; } return false; }
/// <summary> /// Tarkistetaan voidaanko nappulalla syödä toinen nappula. /// </summary> /// <param name="nappula">Liikutettava nappula</param> /// <param name="syotavaNappula">Syötävä nappula</param> private void TarkistaSyontiLiikutusTammi(Pelinappula nappula, Pelinappula syotavaNappula) { int liikutettavanRow = Grid.GetRow(nappula); int liikutettavanColumn = Grid.GetColumn(nappula); int syotavaRow = Grid.GetRow(syotavaNappula); int syotavaColumn = Grid.GetColumn(syotavaNappula); int i = liikutettavanColumn - syotavaColumn; // Ei anneta hypätä pelilaudan ulkopuolelle, palataan. if (syotavaColumn == 0 || (syotavaColumn == pelikentta.GetPelikentanKoko() - 1) || (syotavaRow == 0) || (syotavaRow == pelikentta.GetPelikentanKoko() - 1)) { pelikentta.VarjaaPunaiseksi(syotavaColumn, syotavaRow, ruudukko1VariMuisti, ruudukko2VariMuisti); joLiikutettu = true; return; } if (nappula.GetTammi() && liikuttuEriSuuntaan == true) { if (nappula.GetPelaaja() == 1) { // oikea (-1) vasen (1) if (i == -1) // oikea { VoikoLiikkuaTammi(liikutettavanColumn + 2, liikutettavanRow - 2, nappula, syotavaNappula); } if (i == 1) // vasen { VoikoLiikkuaTammi(liikutettavanColumn - 2, liikutettavanRow - 2, nappula, syotavaNappula); } return; } if (nappula.GetPelaaja() == 2) { if (i == -1) // oikea { VoikoLiikkuaTammi(liikutettavanColumn + 2, liikutettavanRow + 2, nappula, syotavaNappula); } if (i == 1) // vasen { VoikoLiikkuaTammi(liikutettavanColumn - 2, liikutettavanRow + 2, nappula, syotavaNappula); } return; } } if (nappula.GetPelaaja() == 1) { // oikea (-1) vasen (1) if (i == -1) // oikea { VoikoLiikkuaTammi(liikutettavanColumn + 2, liikutettavanRow + 2, nappula, syotavaNappula); } if (i == 1) // vasen { VoikoLiikkuaTammi(liikutettavanColumn - 2, liikutettavanRow + 2, nappula, syotavaNappula); } } if (nappula.GetPelaaja() == 2) { if (i == -1) // oikea { VoikoLiikkuaTammi(liikutettavanColumn + 2, liikutettavanRow - 2, nappula, syotavaNappula); } if (i == 1) // vasen { VoikoLiikkuaTammi(liikutettavanColumn - 2, liikutettavanRow - 2, nappula, syotavaNappula); } } }
/// <summary> /// Tarkistaa muuttuuko nappula tammeksi, eli onko se pelilaudan toisessa päässä verrattuna /// aloituspäähän. /// </summary> /// <param name="nappula">Liikutettava nappula</param> private void TarkistaMuuttuukoTammeksi(Pelinappula nappula) { if (nappula.GetPelaaja() == 1) { if (Grid.GetRow(nappula) == pelikentta.GetPelikentanKoko() - 1) { if (!nappula.GetTammi()) { nappula.SuurennaNappula(); nappula.SetTammi(true); } } } if (nappula.GetPelaaja() == 2) { if (Grid.GetRow(nappula) == 0) { if (!nappula.GetTammi()) { nappula.SuurennaNappula(); nappula.SetTammi(true); } } } }
/// <summary> /// Tarkistaa onko nappulalla vapaita siirjtoja. /// </summary> /// <param name="nappula"></param> /// <param name="pelaaja"></param> /// <returns></returns> private bool TarkistaVapaatSiirrot(Pelinappula nappula) { int nappulaColumn = Grid.GetColumn(nappula); int nappulaRow = Grid.GetRow(nappula); if (nappula.GetPelaaja() == 1 && !nappula.GetTammi()) { if (nappulaColumn == 0 || nappulaColumn == pelikentta.GetPelikentanKoko() - 1) // tarkistetaan onko nappula ruudukon vasemmassa vai oikeassa reunassa { if (nappulaColumn == 0) // jos column vasemmassa reunassa { bool a = Nappula1ColumnReuna(nappula, nappulaColumn, nappulaRow, 1, 1, 2, 2); return a; } else // jos column oikea reuna { bool a = Nappula1ColumnReuna(nappula, nappulaColumn, nappulaRow, -1, 1, -2, 2); return a; } } else // Tänne kaikki muut automaattiset siirrot { } } else if (nappula.GetPelaaja() == 1 && nappula.GetTammi()) // tänne tamminappulan 1 automaattisiirrot { } if (nappula.GetPelaaja() == 2 && !nappula.GetTammi()) { if (nappulaColumn == 0 || nappulaColumn == pelikentta.GetPelikentanKoko() - 1) { if (nappulaColumn == 0) // jos column vasemmassa reunassa { bool a = Nappula1ColumnReuna(nappula, nappulaColumn, nappulaRow, 1, -1, 2, -2); return a; } else // jos column oikeassa reunassa { bool a = Nappula1ColumnReuna(nappula, nappulaColumn, nappulaRow, -1, -1, -2, -2); return a; } } else // tänne kaikki muut automaattisiirrot { } } else if (nappula.GetPelaaja() == 2 && nappula.GetTammi()) // tamminappulan 2 automaattisiirrot { } return false; }
/// <summary> /// Tarkistetaan mahdolliset automaattiset liikutukset. /// </summary> /// <param name="nappula">Liikutettava nappula</param> private bool TarkistaMahdollisetLiikutukset(Pelinappula nappula) { if (nappula.GetTammi()) { } else { bool siirretty = TarkistaVapaatSiirrot(nappula); return siirretty; } return false; }
/// <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); } } } }