/// <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); }
/// <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); }
/// <summary> /// Poistaa nappulan pelipaikalta /// </summary> public void poistaNappula() { this.onkoTyhja = true; if (nappulaPaikalla == null) { return; } this.nelio.Children.Remove(nappulaPaikalla); nappulaPaikalla = null; }
/// <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; }
/// <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); }
/// <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); }
/// <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; } }
/// <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); }
/// <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); }
/// <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); }
/// <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; }
/// <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()); }