/// <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> /// Tarkistetaan voittiko jompi kumpi pelaaja pelin /// </summary> private void TarkistaVoitto(Pelinappula syotyNappula) { if (syotyNappula.GetPelaaja() == 1) { pelaaja1NappuloidenMaara--; } else pelaaja2NappuloidenMaara--; if (pelaaja1NappuloidenMaara == 0) { IlmoitaVoittaja(pelaaja2 + " voitti!"); } if (pelaaja2NappuloidenMaara == 0) { IlmoitaVoittaja(pelaaja1 + " voitti!"); } }
/// <summary> /// Tarkistetaan onko nappulan toisella puolella tyhjä ruutu, eli voidaanko /// hypätä yli. /// </summary> /// <param name="liikutettavanColumn">Liikutettavan nappulan column</param> /// <param name="liikutettavanRow">Liikutettavan nappulan row</param> /// <returns></returns> private bool TarkistaOnkoRuutuTyhja(int liikutettavanColumn, int liikutettavanRow, Pelinappula syotavaNappula) { foreach (Pelinappula nappula in lista) { if (Grid.GetColumn(nappula) == liikutettavanColumn && Grid.GetRow(nappula) == liikutettavanRow) { pelikentta.VarjaaPunaiseksi(columnKlikkaus, rowKlikkaus, ruudukko1VariMuisti, ruudukko2VariMuisti); return false; } } return true; }
/// <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> /// Tarkistetaan voiko nappula liikkua tammessa. /// </summary> /// <param name="p1">Liikutusehto 1</param> /// <param name="p2">Liikutusehto 2</param> private void VoikoLiikkuaTammi(int p1, int p2, Pelinappula nappula, Pelinappula syotavaNappula) { Boolean a = TarkistaOnkoRuutuTyhja(p1, p2, syotavaNappula); if (a == true) { soiko = true; SyoNappula(syotavaNappula); LiikutaNappulaa(nappula, p1, p2); // SyoNappula(syotavaNappula); } else { joLiikutettu = true; return; } }
/// <summary> /// Tammen monimutkainen alustus, otetti huomioon kaikki /// eri pelilaudan koot. /// </summary> private void AlustaTammi() { pelaaja1NappuloidenMaara = 0; pelaaja2NappuloidenMaara = 0; int pariton = 0; int pelikentanKoko = pelikentta.GetPelikentanKoko(); // Ensimmäisen pelaajan nappulat sijoittuvat samalla tavalla riippumatta laudan koosta for (int i = 0; i < 3; i++) { for (int o = 0; o < pelikentanKoko; o += 2) { if (pariton % 2 == 0) { Pelinappula nappula = new Pelinappula(); nappula.SetPelaaja(1); if (pelaaja1VariMuisti != null) nappula.SetVari1(pelaaja1VariMuisti); pelaaja1NappuloidenMaara++; nappula.ClickLol += nappula_Click; Grid.SetColumn(nappula, o); Grid.SetRow(nappula, i); pelikentta.myGrid.Children.Add(nappula); lista.Add(nappula); } else { if (o < pelikentanKoko - 1) { Pelinappula nappula = new Pelinappula(); nappula.SetPelaaja(1); if (pelaaja1VariMuisti != null) nappula.SetVari1(pelaaja1VariMuisti); pelaaja1NappuloidenMaara++; nappula.ClickLol += nappula_Click; Grid.SetColumn(nappula, o + 1); Grid.SetRow(nappula, i); pelikentta.myGrid.Children.Add(nappula); lista.Add(nappula); } } } pariton++; } pariton = 0; // Toisen pelaajan nappuloiden sijoittelu on vähän monimutkaisempi // Menevät eri tavalla riippuen onko pelilaudan koko pariton vai parillinen if (pelikentanKoko % 2 != 0) { for (int i = pelikentanKoko - 1; i > pelikentanKoko - 4; i--) { for (int o = 0; o < pelikentanKoko; o += 2) { if (pariton % 2 == 0) { Pelinappula nappula = new Pelinappula(); nappula.SetPelaaja(2); if (pelaaja2VariMuisti != null) nappula.SetVari2(pelaaja2VariMuisti); pelaaja2NappuloidenMaara++; nappula.ClickLol += nappula_Click; Grid.SetColumn(nappula, o); Grid.SetRow(nappula, i); pelikentta.myGrid.Children.Add(nappula); lista.Add(nappula); } else { if (o < pelikentanKoko - 1) { Pelinappula nappula = new Pelinappula(); nappula.SetPelaaja(2); if (pelaaja2VariMuisti != null) nappula.SetVari2(pelaaja2VariMuisti); pelaaja2NappuloidenMaara++; nappula.ClickLol += nappula_Click; Grid.SetColumn(nappula, o + 1); Grid.SetRow(nappula, i); pelikentta.myGrid.Children.Add(nappula); lista.Add(nappula); } } } pariton++; } } else { for (int i = pelikentanKoko - 1; i > pelikentanKoko - 4; i--) { for (int o = 0; o < pelikentanKoko; o += 2) { if (pariton % 2 == 0) { Pelinappula nappula = new Pelinappula(); nappula.SetPelaaja(2); if (pelaaja2VariMuisti != null) nappula.SetVari2(pelaaja2VariMuisti); pelaaja2NappuloidenMaara++; nappula.ClickLol += nappula_Click; Grid.SetColumn(nappula, o + 1); Grid.SetRow(nappula, i); pelikentta.myGrid.Children.Add(nappula); lista.Add(nappula); } else { if (o < pelikentanKoko - 1) { Pelinappula nappula = new Pelinappula(); nappula.SetPelaaja(2); if (pelaaja2VariMuisti != null) nappula.SetVari2(pelaaja2VariMuisti); pelaaja2NappuloidenMaara++; nappula.ClickLol += nappula_Click; Grid.SetColumn(nappula, o); Grid.SetRow(nappula, i); pelikentta.myGrid.Children.Add(nappula); lista.Add(nappula); } } } pariton++; } } pariton = 0; ArvoVuoro(lista); }
/// <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> /// Tarkistetaan nappulan automaattiliikutus jos se on pelaajan 1 nappula /// ja sijaitsee oikeassa laidassa. /// </summary> /// <param name="nappula">Automaattisesti liikutettava nappula</param> /// <param name="nappulaColumn">Automaattisesti liikutettavan nappulan column</param> /// <param name="nappulaRow">Automaattisesti liikutettavan nappulan row</param> /// <param name="p1">Liikutusehto 1 kun ei syödä</param> /// <param name="p2">Liikutusehto 2 kun ei syödä</param> /// <param name="p11">Liikutusehto 1 kun syödään automaattisesti</param> /// <param name="p22">Liikutusehto 2 kun syödään automaattisesti</param> /// <returns>Palauttaa false/true sen mukaan onko liikutettu automaattisesti</returns> private bool Nappula1ColumnReuna(Pelinappula nappula, int nappulaColumn, int nappulaRow, int p1, int p2, int p11, int p22) { Boolean liikutetaanko = true; if (nappulaRow < pelikentta.GetPelikentanKoko() - 2 && nappula.GetPelaaja() == 1 || nappula.GetPelaaja() == 2 && nappulaRow > 1) { foreach (Pelinappula nappula1 in lista) { if (Grid.GetColumn(nappula1) == nappulaColumn + p1 && Grid.GetRow(nappula1) == nappulaRow + p2) { liikutetaanko = false; if (nappula1.GetPelaaja() != nappula.GetPelaaja()) { if (TarkistaOnkoRuutuTyhjaAutomaatti(nappulaColumn + p11, nappulaRow + p22, true)) { soiko = true; LiikutaNappulaa(nappula, nappulaColumn + p11, nappulaRow + p22); SyoNappula(nappula1); return true; } else { PoistaValinta(); } } } } if (liikutetaanko == true) { LiikutaNappulaa(nappula, nappulaColumn + p1, nappulaRow + p2); return true; } else { TarkistaOnkoRuutuTyhjaAutomaatti(nappulaColumn + p1, nappulaRow + p2, true); PoistaValinta(); } } else { liikutetaanko = true; foreach (Pelinappula nappula1 in lista) { if (Grid.GetColumn(nappula1) == nappulaColumn + p1 && Grid.GetRow(nappula1) == nappulaRow + p2) { liikutetaanko = false; if (nappula1.GetPelaaja() == 2) { PoistaValinta(); liikutetaanko = false; TarkistaOnkoRuutuTyhjaAutomaatti(nappulaColumn + p1, nappulaRow + p2, true); } if (nappula1.GetPelaaja() == 1) { PoistaValinta(); liikutetaanko = false; TarkistaOnkoRuutuTyhjaAutomaatti(nappulaColumn + p1, nappulaRow + p2, true); } } } if (liikutetaanko == true) { LiikutaNappulaa(nappula, nappulaColumn + p1, nappulaRow + p2); return true; } } return false; }
/// <summary> /// Poistetaan syöty nappula pelilaudalta ja tarkistetaan onko /// peli voitettu /// </summary> /// <param name="nappula1">Nappula joka syödään</param> private void SyoNappula(Pelinappula nappula1) { pelikentta.myGrid.Children.Remove(nappula1); Grid.SetColumn(nappula1, 200); Grid.SetRow(nappula1, 200); TarkistaVoitto(nappula1); nappula1.Syoty(true); joLiikutettu = true; varjataanko = 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> /// 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 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> /// Alustetaan Breakthrough-pelikenttä. /// </summary> private void AlustaBreakthrough() { int pelikentanKoko = pelikentta.GetPelikentanKoko(); // Toisen pelaajan nappulat for (int i = 0; i < 2; i++) { for (int o = 0; o < pelikentanKoko; o++) { Pelinappula nappula = new Pelinappula(); nappula.SetPelaaja(1); if (pelaaja1VariMuisti != null) nappula.SetVari1(pelaaja1VariMuisti); nappula.ClickLol += nappula_Click; Grid.SetColumn(nappula, o); Grid.SetRow(nappula, i); pelikentta.myGrid.Children.Add(nappula); lista.Add(nappula); } } // Ja toisen pelaajan nappulat for (int i = pelikentanKoko - 1; i > pelikentanKoko - 3; i--) { for (int o = 0; o < pelikentanKoko; o++) { Pelinappula nappula = new Pelinappula(); nappula.SetPelaaja(2); if (pelaaja2VariMuisti != null) nappula.SetVari2(pelaaja2VariMuisti); nappula.ClickLol += nappula_Click; Grid.SetColumn(nappula, o); Grid.SetRow(nappula, i); pelikentta.myGrid.Children.Add(nappula); lista.Add(nappula); } } ArvoVuoro(lista); }
/// <summary> /// Laitetaan siirrot muistiin StringBuilderiin. /// </summary> /// <param name="columnKlikkaus">Klikattu column</param> /// <param name="rowKlikkaus">Klikattu row</param> /// <param name="nappula">nappula jota liikutettiin</param> private void KirjoitaMuistiin(int columnKlikkaus, int rowKlikkaus, Pelinappula nappula) { if (nappula.GetPelaaja() == 1) { muisti.Append(pelaaja1 + "(1)" + ": " + "Ruudusta " + "(" + (Grid.GetColumn(nappula) + 1) + ", " + (Grid.GetRow(nappula) + 1) + ") " + " ruutuun " + "(" + (columnKlikkaus + 1) + ", " + (rowKlikkaus + 1) + ") "); if (soiko == true) muisti.Append("Söi vastustajan nappulan"); muisti.Append("\n"); // soiko = false; } else { muisti.Append(pelaaja2 + "(2)" + ": " + "Ruudusta " + "(" + (Grid.GetColumn(nappula) + 1) + ", " + (Grid.GetRow(nappula) + 1) + ") " + " ruutuun " + "(" + (columnKlikkaus + 1) + ", " + (rowKlikkaus + 1) + ") "); if (soiko == true) muisti.Append("Söi vastustajan nappulan"); muisti.Append("\n"); // soiko = false; } tallennus.IsEnabled = true; tulostus.IsEnabled = true; luovutus.IsEnabled = true; }
/// <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> /// Tarkistaa onko siirryttävässä ruudussa nappula, jos ei niin siirrytään ja jos on /// niin tarkisteaan voidaanko syödä. /// </summary> /// <param name="r1">Ehto 1</param> /// <param name="r2">Ehto 2</param> /// <param name="r3">Ehto 3</param> /// <param name="p1">Oma nappula</param> /// <param name="p2">Vastustajan nappula</param> private void OnkoRuudussaNappula(int r1, int r2, int r3, int p2, int p1, Pelinappula nappula) { rowKlikkaus = pelikentta.GetRow(); columnKlikkaus = pelikentta.GetColumn(); columnNappula = Grid.GetColumn(nappula); rowNappula = Grid.GetRow(nappula); if ((rowKlikkaus - rowNappula) == r1 && ((columnKlikkaus - columnNappula) == r2 || (columnKlikkaus - columnNappula) == r3)) { // 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() == p2) { TarkistaSyontiLiikutusTammi(nappula, nappula1); } // Lopetetaan jos siirryttävässä ruudussa on jo oma nappula. if ((Grid.GetRow(nappula1) == rowKlikkaus) && (Grid.GetColumn(nappula1) == columnKlikkaus) && (nappula1.GetPelaaja() == p1)) { pelikentta.VarjaaPunaiseksi(columnKlikkaus, rowKlikkaus, ruudukko1VariMuisti, ruudukko2VariMuisti); return; } } // Jos päästään tänne, voidaan siirtää valittu nappula klikattavaan kohtaan. if (joLiikutettu == false) { liikuttuEriSuuntaan = false; LiikutaNappulaa(nappula, columnKlikkaus, rowKlikkaus); varjataanko = false; } joLiikutettu = false; } if (rowKlikkaus != rowNappula || columnKlikkaus != columnNappula) { if (varjataanko == true) { pelikentta.VarjaaPunaiseksi(columnKlikkaus, rowKlikkaus, ruudukko1VariMuisti, ruudukko2VariMuisti); varjataanko = true; } } }
/// <summary> /// Tarkistetaan onko syötäviä nappuloita tammi-nappulalla kun on jo kerran syöty /// </summary> /// <param name="nappula">Liikutettava nappula</param> /// <param name="vastustaja">Vastustaja</param> /// <returns></returns> private bool OnkoSyotaviaTammi(Pelinappula nappula, int vastustaja) { int mahdollisetSiirrot = 0; // keskellä kaikki if (Grid.GetRow(nappula) > 1 && Grid.GetRow(nappula) < pelikentta.GetPelikentanKoko() - 2 && Grid.GetColumn(nappula) > 1 && Grid.GetColumn(nappula) < pelikentta.GetPelikentanKoko() - 2) { foreach (Pelinappula nappula1 in lista) { if (nappula1.GetPelaaja() == vastustaja && Grid.GetRow(nappula1) == Grid.GetRow(nappula) + 1 && Grid.GetColumn(nappula1) == Grid.GetColumn(nappula) + 1) { if (TarkistaOnkoRuutuTyhjaAutomaatti(Grid.GetColumn(nappula) + 2, Grid.GetRow(nappula) + 2, false)) { mahdollisetSiirrot++; } } if (nappula1.GetPelaaja() == vastustaja && Grid.GetRow(nappula1) == Grid.GetRow(nappula) + 1 && Grid.GetColumn(nappula1) == Grid.GetColumn(nappula) - 1) { if (TarkistaOnkoRuutuTyhjaAutomaatti(Grid.GetColumn(nappula) - 2, Grid.GetRow(nappula) + 2, false)) { mahdollisetSiirrot++; } } if (nappula1.GetPelaaja() == vastustaja && Grid.GetRow(nappula1) == Grid.GetRow(nappula) - 1 && Grid.GetColumn(nappula1) == Grid.GetColumn(nappula) + 1) { if (TarkistaOnkoRuutuTyhjaAutomaatti(Grid.GetColumn(nappula) + 2, Grid.GetRow(nappula) - 2, false)) { mahdollisetSiirrot++; } } if (nappula1.GetPelaaja() == vastustaja && Grid.GetRow(nappula1) == Grid.GetRow(nappula) - 1 && Grid.GetColumn(nappula1) == Grid.GetColumn(nappula) - 1) { if (TarkistaOnkoRuutuTyhjaAutomaatti(Grid.GetColumn(nappula) - 2, Grid.GetRow(nappula) - 2, false)) { mahdollisetSiirrot++; } } } } // ylhäälä vasen ja oikea if (Grid.GetRow(nappula) <= 1 && Grid.GetColumn(nappula) > 1 && Grid.GetColumn(nappula) < pelikentta.GetPelikentanKoko() - 2) { foreach (Pelinappula nappula1 in lista) { if (nappula1.GetPelaaja() == vastustaja && Grid.GetRow(nappula1) == Grid.GetRow(nappula) + 1 && Grid.GetColumn(nappula1) == Grid.GetColumn(nappula) + 1) { if (TarkistaOnkoRuutuTyhjaAutomaatti(Grid.GetColumn(nappula) + 2, Grid.GetRow(nappula) + 2, false)) { mahdollisetSiirrot++; } } if (nappula1.GetPelaaja() == vastustaja && Grid.GetRow(nappula1) == Grid.GetRow(nappula) + 1 && Grid.GetColumn(nappula1) == Grid.GetColumn(nappula) - 1) { if (TarkistaOnkoRuutuTyhjaAutomaatti(Grid.GetColumn(nappula) - 2, Grid.GetRow(nappula) + 2, false)) { mahdollisetSiirrot++; } } } } // alhaalla vasen ja oikea if (Grid.GetRow(nappula) >= pelikentta.GetPelikentanKoko() - 2 && Grid.GetColumn(nappula) > 1 && Grid.GetColumn(nappula) < pelikentta.GetPelikentanKoko() - 2) { foreach (Pelinappula nappula1 in lista) { if (nappula1.GetPelaaja() == vastustaja && Grid.GetRow(nappula1) == Grid.GetRow(nappula) - 1 && Grid.GetColumn(nappula1) == Grid.GetColumn(nappula) + 1) { if (TarkistaOnkoRuutuTyhjaAutomaatti(Grid.GetColumn(nappula) + 2, Grid.GetRow(nappula) - 2, false)) { mahdollisetSiirrot++; } } if (nappula1.GetPelaaja() == vastustaja && Grid.GetRow(nappula1) == Grid.GetRow(nappula) - 1 && Grid.GetColumn(nappula1) == Grid.GetColumn(nappula) - 1) { if (TarkistaOnkoRuutuTyhjaAutomaatti(Grid.GetColumn(nappula) - 2, Grid.GetRow(nappula) - 2, false)) { mahdollisetSiirrot++; } } } } // vasemmalla ylös oikea ja alas oikea if (Grid.GetColumn(nappula) <= 1 && Grid.GetRow(nappula) > 1 && Grid.GetRow(nappula) < pelikentta.GetPelikentanKoko() - 2) { foreach (Pelinappula nappula1 in lista) { if (nappula1.GetPelaaja() == vastustaja && Grid.GetRow(nappula1) == Grid.GetRow(nappula) - 1 && Grid.GetColumn(nappula1) == Grid.GetColumn(nappula) + 1) { if (TarkistaOnkoRuutuTyhjaAutomaatti(Grid.GetColumn(nappula) + 2, Grid.GetRow(nappula) - 2, false)) { mahdollisetSiirrot++; } } if (nappula1.GetPelaaja() == vastustaja && Grid.GetRow(nappula1) == Grid.GetRow(nappula) + 1 && Grid.GetColumn(nappula1) == Grid.GetColumn(nappula) + 1) { if (TarkistaOnkoRuutuTyhjaAutomaatti(Grid.GetColumn(nappula) + 2, Grid.GetRow(nappula) + 2, false)) { mahdollisetSiirrot++; } } } } // oikealla ylös vase ja alas vasen if (Grid.GetColumn(nappula) >= pelikentta.GetPelikentanKoko() - 2 && Grid.GetRow(nappula) > 1 && Grid.GetRow(nappula) < pelikentta.GetPelikentanKoko() - 2) { foreach (Pelinappula nappula1 in lista) { if (nappula1.GetPelaaja() == vastustaja && Grid.GetRow(nappula1) == Grid.GetRow(nappula) - 1 && Grid.GetColumn(nappula1) == Grid.GetColumn(nappula) - 1) { if (TarkistaOnkoRuutuTyhjaAutomaatti(Grid.GetColumn(nappula) - 2, Grid.GetRow(nappula) - 2, false)) { mahdollisetSiirrot++; } } if (nappula1.GetPelaaja() == vastustaja && Grid.GetRow(nappula1) == Grid.GetRow(nappula) + 1 && Grid.GetColumn(nappula1) == Grid.GetColumn(nappula) - 1) { if (TarkistaOnkoRuutuTyhjaAutomaatti(Grid.GetColumn(nappula) - 2, Grid.GetRow(nappula) + 2, false)) { mahdollisetSiirrot++; } } } } if (mahdollisetSiirrot > 0) return true; return false; }
/// <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; } } } } }