Esempio n. 1
0
        /// <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!");
            }
        }
Esempio n. 2
0
        /// <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;
        }
Esempio n. 3
0
        /// <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);
                    }
                }
            }
        }
Esempio n. 4
0
        /// <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);
                }
            }
        }
Esempio n. 5
0
        /// <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;
        }
Esempio n. 6
0
        /// <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;
        }
Esempio n. 7
0
        /// <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);
                    }

                }
            }
        }
Esempio n. 8
0
        /// <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;
        }
Esempio n. 9
0
        /// <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;
                        }
                    }
                }
            }
        }