示例#1
0
        /// <summary>
        /// Siirretään haluttu nappula haluttuun paikkaan, jos mahdollista
        /// </summary>
        /// <param name="valittuPaikka">paikka jonne siirretään</param>
        /// <param name="valittuNappula">nappula joka siirretään</param>
        /// <returns>true jos siirto onnistui, false jos ei onnistunut tai jos peli päättyi</returns>
        protected bool siirra(Paikka valittuPaikka, Nappula valittuNappula)
        {
            Grid   control    = (Grid)valittuNappula.Parent;
            Paikka alkuPaikka = valittuNappula.annaPaikka();

            control.Children.Remove(valittuNappula); //Poistetaan nappula vanhalta paikaltaan
            alkuPaikka.OnkoTyhja = true;
            if (!valittuPaikka.OnkoTyhja)            //Jos valitussa paikassa on jo nappula niin se poistetaan
            {
                valittuPaikka.annaNappula().Syoty = true;
                valittuPaikka.poistaNappula();
            }
            valittuPaikka.lisaaNappula(valittuNappula);
            alkuPaikka.poistaNappula();;
            if (!onkoJaljella()) //jos kaikki vastustajan nappulat syöty
            {
                Paaty();
                return(false);
            }
            if (onkoPaadyssa(valittuNappula)) //jos nappula saapui pelilaudan päätyyn
            {
                Paaty();
                return(false); // Jos voittoehdot täyttyvät
            }
            return(true);
        }
示例#2
0
 /// <summary>
 /// Vaihtaa vuoron vastapelaajalle ja poistaa valinnan edellisestä pelinappulasta
 /// </summary>
 private void vuoronvaihto()
 {
     valittuNappula.poistaValinta();
     valittuNappula     = null;
     this.pelaajanVuoro = this.pelaajanVuoro * -1;
     lautaPeli.asetaVuoro(pelaajanVuoro);
 }
示例#3
0
 /// <summary>
 /// Poistaa nappulan pelipaikalta
 /// </summary>
 public void poistaNappula()
 {
     this.onkoTyhja = true;
     if (nappulaPaikalla == null)
     {
         return;
     }
     this.nelio.Children.Remove(nappulaPaikalla);
     nappulaPaikalla = null;
 }
示例#4
0
 /// <summary>
 /// Lisää pelinappulan pelipaikkaan
 /// </summary>
 /// <param name="nappula">pelinappula joka lisätään</param>
 public void lisaaNappula(Nappula nappula)
 {
     if (nappula == null)
     {
         return;
     }
     this.nelio.Children.Add(nappula); //Lisätään nappula valittuun paikkaan
     nappulaPaikalla = nappula;
     this.OnkoTyhja  = false;
 }
示例#5
0
 /// <summary>
 /// Katsotaan onko valitun nappulan vuoro pelissä
 /// </summary>
 /// <param name="sender">nappula jonka perusteella vuoro tarkistetaan</param>
 /// <returns>onko oikea vuoro (true) vai ei (false)</returns>
 private bool oikeaVuoro(Nappula sender)
 {
     if (pelaajanVuoro == -1 && sender.ympyra.Fill == nappuloidenVari2)
     {
         return(false);
     }
     if (pelaajanVuoro == 1 && sender.ympyra.Fill == nappuloidenVari1)
     {
         return(false);
     }
     return(true);
 }
示例#6
0
        /// <summary>
        /// Selvittää onko tehtävä siirto sääntöjen mukainen
        /// </summary>
        /// <param name="mista">mistä siirretään</param>
        /// <param name="mihin">minne siirrettään</param>
        /// <returns>true jos saa siirtää, false jos ei saa siirtää</returns>
        public virtual bool onkoLaillinen(Nappula valittuNappula, Paikka mihin)
        {
            Paikka mista = valittuNappula.annaPaikka();

            string alku  = mista.Name;
            string loppu = mihin.Name;

            kirjainNro1 = char.ToUpper(alku[0]) - 65; // 'A' on 65 joten siksi -65; ei varsinaisesti väliä
            kirjainNro2 = char.ToUpper(loppu[0]) - 65;

            numero1 = Int32.Parse(alku.Substring(1, alku.Length - 1));
            numero2 = Int32.Parse(loppu.Substring(1, loppu.Length - 1));

            return(true);
        }
示例#7
0
        /// <summary>
        /// Luo pelinappulat halutulle riville halutun värisinä ja lisää luodut nappulat listaan
        /// </summary>
        /// <param name="rivi">jolle pelinappulat luodaan</param>
        /// <param name="vari">luotavien pelinappuloiden väri</param>
        /// <param name="nappulat">lista jonne pelinappulat lisätään</param>
        public void luoNappulatBreakT(int rivi, Brush vari, List <Nappula> nappulat)
        {
            int siirtojaVoittoon = paikat.GetLength(0) - 2;                           // lasketaan rivin perusteella monestiko

            if (rivi == 0 || rivi == paikat.GetLength(0) - 1)
            {
                siirtojaVoittoon += 1;                                                // pitää siirtää jotta voittaa
            }
            for (int i = 0; i < paikat.GetLength(1); i++)
            {
                Nappula uusi = new Nappula(vari, siirtojaVoittoon);
                uusi.Valinta += nappula_Valinta;
                nappulat.Add(uusi);
                paikat[i, rivi].lisaaNappula(uusi);
                paikat[i, rivi].OnkoTyhja = false;
            }
        }
示例#8
0
 /// <summary>
 /// Tarkistaa onko haluttu siirto sääntöjen mukainen
 /// </summary>
 /// <param name="valittuNappula">siirrettävä nappula</param>
 /// <param name="mihin">ruutu jonne halutaan siirtää</param>
 /// <returns>true jos laillinen, false jos ei ole</returns>
 public override bool onkoLaillinen(Nappula valittuNappula, Paikka mihin)
 {
     base.onkoLaillinen(valittuNappula, mihin);
     if (kirjainNro1 - kirjainNro2 > 1 || kirjainNro1 - kirjainNro2 < -1)
     {
         return(false);                                                                 //false jos sivusiirto enemmän kuin yksi
     }
     if (!mihin.OnkoTyhja && kirjainNro1 == kirjainNro2)
     {
         return(false);                                                //estää syömisen suoraan edestä
     }
     if (numero1 - numero2 != pelaajanVuoro)
     {
         return(false);                                    //estetään väärään suuntaan liikkuminen
     }
     return(true);
 }
示例#9
0
 /// <summary>
 /// Jos mahdollista, niin siirtää nappulan valittuun paikkaan
 /// </summary>
 /// <param name="valittuNappula">nappula joka siirretään</param>
 /// <param name="valittu">paikka jonne siirretään</param>
 /// <returns>onnistuiko siirto vai ei (true, false)</returns>
 public bool paikkaValinta(Nappula valittuNappula, Paikka valittu)
 {
     this.valittuPaikka = valittu;
     if (valittuNappula == null || !valittuNappula.Valittu)
     {
         return(false);                                                   //Jos ei ole nappulaa valittuna, ei tehdä mitään
     }
     if (!valittuPaikka.OnkoTyhja && !onkoVastustaja(valittuPaikka))
     {
         return(false);                                                            //Jos valitussa paikassa oma nappula, ei tehdä mitään
     }
     if (onkoLaillinen(valittuNappula, valittuPaikka))
     {
         return(siirra(valittuPaikka, valittuNappula));
     }
     valittuPaikka.virheellinen(); return(false);
 }
示例#10
0
        /// <summary>
        /// Katsoo onko jollakin pelipaikalla oleva nappula vastustajan, eli sen pelaajan, jonka vuoro ei ole tällä hetkellä
        /// </summary>
        /// <param name="sender">Paikka jonka nappula tarkistetaan</param>
        /// <returns>true jos vasustajan, false jos ei ole</returns>
        public bool onkoVastustaja(Paikka sender)
        {
            Nappula paikalla = sender.annaNappula();

            if (paikalla == null)
            {
                return(false);
            }
            if (paikalla.ympyra.Fill == nappuloidenVari1 && pelaajanVuoro == 1)
            {
                return(true);
            }
            if (paikalla.ympyra.Fill == nappuloidenVari2 && pelaajanVuoro == -1)
            {
                return(true);
            }
            return(false);
        }
示例#11
0
        /// <summary>
        /// Asettaa valitun nappulan ja muuttaa sen ulkoasua
        /// </summary>
        /// <param name="sender">joka asetetaan valituksi nappulaksi</param>
        private void nappula_Valinta(Nappula sender)
        {
            if (!oikeaVuoro(sender))
            {
                return;                      //jos tullaan väärällä vuorolla, ei tehdä mitään
            }
            foreach (Nappula n in mustat)
            {
                n.poistaValinta();
            }
            foreach (Nappula n in valkoiset)
            {
                n.poistaValinta();
            }
            valittuNappula = sender;

            //Mahdolliset muutokset tämän hetkiseen valittuun nappulaan
            valittuNappula.ympyra.StrokeThickness = 3;
        }
示例#12
0
 /// <summary>
 /// katsotaan onko nappula vastustajan puoleisessa päädyssä
 /// </summary>
 /// <param name="valittuNappula">nappula joka tarkistetaan</param>
 /// <returns></returns>
 protected bool onkoPaadyssa(Nappula valittuNappula)
 {
     return(valittuNappula.kohtiPaatya());
 }