/// <summary> /// Siirtää nappulan paikasta toiseen ja päivittää kyseisten paikkojen OnkoTyhja -arvon /// </summary> /// <param name="sender">Paikka joka valittu, eli jonne nappula siirtyy</param> private void paikka_Valinta(Paikka sender) { if (lautaPeli.paikkaValinta(valittuNappula, sender)) { vuoronvaihto(); } }
/// <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> /// 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> /// 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> /// Luo rivin paikkoja /// </summary> /// <param name="monesko">monesko rivi luodaan</param> /// <param name="ensimmainenVari">joka toisen paikan väri</param> /// <param name="toinenVari">joka toisen paikan väri</param> public void luoRivi(int monesko, Brush ensimmainenVari, Brush toinenVari) { Brush vari; for (int i = 0; i < Koko; i++) { if (i % 2 == 0) { vari = ensimmainenVari; } else { vari = toinenVari; } Paikka uusi = new Paikka(i, monesko - 1, vari); uusi.PaikkaValittu += paikka_Valinta; paikat[i, monesko - 1] = uusi; lautaPeli.asetaPaikat(paikat); pelialue.Children.Add(uusi); } }