/// <summary> /// Luodaan nappulat /// </summary> public void LuoNappulat() { for (int i = 0; i < sallitutPaikat.Count / 2; i++) { int sar = (int)sallitutPaikat[i].X; int riv = (int)sallitutPaikat[i].Y; if (riv >= 3) { break; } Pelinappula.Pelinappula nappula = new Pelinappula.Pelinappula(); if (ylaPelaajanVari == null) { ylaPelaajanVari = Brushes.White; } Pelinappula.Pelinappula.SetVari(nappula, ylaPelaajanVari); valkoiset_nappulat[i] = nappula; gridi.Children.Add(nappula); Grid.SetColumn(nappula, sar); Grid.SetRow(nappula, riv); v_paikat[i] = sallitutPaikat[i]; vapaat_paikat.Remove(new Point(sar, riv)); } int indeksi = taulukoidenKoko - 1; for (int j = sallitutPaikat.Count - 1; j > 0; j--) { int sar = (int)sallitutPaikat[j].X; int riv = (int)sallitutPaikat[j].Y; if (riv < kokoAlue / 2 - 3) { break; } Pelinappula.Pelinappula nappula = new Pelinappula.Pelinappula(); if (alaPelaajanVari == null) { alaPelaajanVari = Brushes.DarkRed; } Pelinappula.Pelinappula.SetVari(nappula, alaPelaajanVari); punaiset_nappulat[indeksi] = nappula; gridi.Children.Add(nappula); Grid.SetColumn(nappula, sar); Grid.SetRow(nappula, riv); p_paikat[indeksi] = sallitutPaikat[j]; vapaat_paikat.Remove(new Point(sar, riv)); indeksi--; } // aloittajan arvonta Random rand = new Random(); vuoro = rand.Next(0, 2); }
/// <summary> /// Käsitellään nappulan syönti ja syövän nappulan siirto sekä mahdollinen voitto /// // Tänne vielä siirtojen keräys!! /// </summary> /// <param name="syova">Nappula, joka liikkuu</param> /// <param name="syotava">Nappula, joka jää syönnin alle</param> /// <param name="syovat">Liikkuvan nappulan paikkataulukko</param> /// <param name="syotavat">Syönnin alle jäävän nappulan paikkataulukko</param> /// <param name="liikkuvat">Liikkuvan nappulan taulukko</param> /// <param name="poistuvat">Syonnin alle jäävän nappulan taulukko</param> private void SyoJaLiiku(Point syova, Point syotava, Point[] syovat, Point[] syotavat, Pelinappula.Pelinappula[] liikkuvat, Pelinappula.Pelinappula[] poistuvat, List <Point> siirrot) { int indeksi = EtsiIndeksi(syova, syovat); if (indeksi == -1) { return; } Pelinappula.Pelinappula liikutettava = liikkuvat[indeksi]; int rivi = (int)syotava.Y; int kolumni = (int)syotava.X; // otetaan nykyinen paikka talteen siirrot.Add(syova); // siirretään liikkuva nappula Grid.SetColumn(liikutettava, kolumni); Grid.SetRow(liikutettava, rivi); siirrot.Add(new Point(kolumni, rivi)); // poistetaan poistettava nappula int i = EtsiIndeksi(syotava, syotavat); if (i != -1) { gridi.Children.Remove(poistuvat[i]); syotavat[i] = new Point(-1, -1); } if (vuoro == 0) // vuoron vaihto { v_paikat[indeksi] = syotava; Pelinappula.Pelinappula.SetVari(liikutettava, alaPelaajanVari); vuoro = 1; // jos nappula voitii if (syotava.Y <= 0) { IlmoitaVoittaja(liikutettava); } } else { if (vuoro == 1) { m_paikat[indeksi] = syotava; Pelinappula.Pelinappula.SetVari(liikutettava, ylaPelaajanVari); vuoro = 0; // jos nappula voitti if (syotava.Y >= kokoAlue / 2 - 1) { IlmoitaVoittaja(liikutettava); } } } }
/// <summary> /// Etsitään annetusta taulukosta annettu nappula /// </summary> /// <param name="nap">Etsittävä nappula</param> /// <param name="t">Taulukko josta etsitään</param> /// <returns>Löytyikö nappulaa vai ei</returns> private bool LoytyykoTaulukosta(Pelinappula.Pelinappula nap, Pelinappula.Pelinappula[] t) { for (int i = 0; i < t.Length; i++) { if (t[i] == nap) { return(true); } } return(false); }
/// <summary> /// Vaihdetaan siirrettävää /// </summary> /// <param name="suunta">Nappuloiden suunat</param> /// <param name="klikatunPaikka">Klikatun paikka</param> /// <param name="omat_paikat">Omien nappuloiden paikka</param> /// <param name="taulukoidenKoko">Taulukoiden koko</param> /// <param name="omat_nappulat">Omat nappulat</param> /// <param name="i">Mikä indeksi</param> /// <param name="perusvari">Nappuloiden perusväri</param> /// <param name="korostusvari">Nappuloiden korostusväri</param> private void VaihdaSiirrettavaa(String suunta, Point klikatunPaikka, Point[] omat_paikat, int taulukoidenKoko, Pelinappula.Pelinappula[] omat_nappulat, int i, SolidColorBrush perusvari, SolidColorBrush korostusvari) { if (LoytyykoTaulukosta(siirrettavaNappula, omat_nappulat)) { Pelinappula.Pelinappula.SetVari(siirrettavaNappula, perusvari); } Pelinappula.Pelinappula.SetVari(omat_nappulat[i], korostusvari); siirrettavaNappula = omat_nappulat[i]; siirrettavanNappulanPaikka = omat_paikat[i]; }
/// <summary> /// Nappulan liikuttaminen (ja mahdollienen syönti, kun klikattu, että halutaan siirtyä /// laatalle, jossa on joku) /// </summary> /// <param name="uusiPaikka">Paikka johon halutaan siirtyä</param> private void LiikutaNappulaa(Point uusiPaikka) { Pelinappula.Pelinappula[] t; Point[] p; String suunta = ""; Point[] toinen_p; Pelinappula.Pelinappula[] toinen_t; List <Point> siirrot; if (vuoro == 0) // jos on valkoisten vuoro { t = valkoiset_nappulat; p = v_paikat; suunta = "ylos"; toinen_p = m_paikat; toinen_t = mustat_nappulat; siirrot = valkoiset_siirrot; } else { if (vuoro >= 2) { return; // jos vuoro ei ole kummankaan } t = mustat_nappulat; p = m_paikat; suunta = "alas"; toinen_p = v_paikat; toinen_t = valkoiset_nappulat; siirrot = mustat_siirrot; } int indeksi = EtsiIndeksi(siirrettavanNappulanPaikka, p); // jos indeksi on -1, jotain on pielessä if (indeksi == -1) { return; } Pelinappula.Pelinappula liikutettava = t[indeksi]; if (!OnkoPaikkaValidi(p[indeksi], uusiPaikka, suunta, p, toinen_p)) { return; } SyoJaLiiku(siirrettavanNappulanPaikka, uusiPaikka, p, toinen_p, t, toinen_t, siirrot); }
/// <summary> /// Vaihtaa nappulan väriä, jos sen saa valita ja muuttaa, mikä nappula on siirrettävänä /// </summary> /// <param name="mahdPaikka">Paikka, johon nappula olisi tarkoitus siirtää</param> /// <param name="paikat">Taulukko, jossa siirrettävän nappulan pitäisi olla</param> /// <param name="nappulat">Taulukko, jossa nappulan pitäisi olla</param> /// <param name="perus">Nappulan perusväri</param> /// <param name="valittu">Nappulan väri, kun se on valittu</param> private void VaihdaVariJaSiirrettava(Point mahdPaikka, Point[] paikat, Pelinappula.Pelinappula[] nappulat, SolidColorBrush perus, SolidColorBrush valittu) { int i = EtsiIndeksi(mahdPaikka, paikat); if (i != -1) { siirrettavanNappulanPaikka = mahdPaikka; // jos siirrettävä nappula löytyy taulukosta if (LoytyykoTaulukosta(siirrettavaNappula, nappulat)) { Pelinappula.Pelinappula.SetVari(siirrettavaNappula, perus); } Pelinappula.Pelinappula.SetVari(nappulat[i], valittu); siirrettavaNappula = nappulat[i]; // täällä vasta päivittyy nappula } }
/// <summary> /// Nappuloiden luonti (mustat ja valkoiset) ja arvotaan aloittaja /// </summary> public void LuoNappulat() { // ylänappulat int i = 0; for (int riv = 0; riv < 2; riv++) { for (int sar = 0; sar < kokoAlue / 2; sar++) { Pelinappula.Pelinappula nappula = new Pelinappula.Pelinappula(); if (ylaPelaajanVari == null) { ylaPelaajanVari = Brushes.Black; } Pelinappula.Pelinappula.SetVari(nappula, ylaPelaajanVari); mustat_nappulat[i] = nappula; gridi.Children.Add(nappula); Grid.SetColumn(nappula, sar); Grid.SetRow(nappula, riv); m_paikat[i] = new Point(sar, riv); i++; } } i = 0; for (int riv = (kokoAlue / 2 - 2); riv < kokoAlue / 2; riv++) { for (int sar = 0; sar < kokoAlue / 2; sar++) { Pelinappula.Pelinappula nappula = new Pelinappula.Pelinappula(); if (alaPelaajanVari == null) { alaPelaajanVari = Brushes.White; } Pelinappula.Pelinappula.SetVari(nappula, alaPelaajanVari); valkoiset_nappulat[i] = nappula; gridi.Children.Add(nappula); Grid.SetColumn(nappula, sar); Grid.SetRow(nappula, riv); v_paikat[i] = new Point(sar, riv); i++; } } // aloittajan arvonta Random rand = new Random(); vuoro = rand.Next(0, 2); }
/// <summary> /// Vaihdetaan voittaneen nappulan väri /// </summary> /// <param name="nappula">Minkä nappulan väri vaihdetaan</param> private void IlmoitaVoittaja(Pelinappula.Pelinappula nappula) { audio.Play(); Pelinappula.Pelinappula.SetVari(nappula, Brushes.SkyBlue); vuoro = 2; }