Exemple #1
0
 /// <summary>
 /// prubuje przemiescic bierke na wskazana pozycje
 /// </summary>
 /// <param name="przemieszczenie">pozycja na ktora ma sie przemiescic bierka</param>
 /// <returns>zwraca prawda jezeli udalo sie przemiescic bierke</returns>
 public virtual bool WykonajRuch(Punkt przemieszczenie)
 {
     //sprawdz czy przemieszczenie znajduje sie na liscie mozliwych ruchow
     if (PobMozliweRuchy.Contains(przemieszczenie))
     {
         PierwszyRuch = false;
         Pozycja      = przemieszczenie;
         return(true);
     }
     return(false);
 }
Exemple #2
0
 /// <summary>
 /// konstruktor do kopiowania
 /// </summary>
 /// <param name="pozycja">Pozycja kopiowanej bierki</param>
 /// <param name="kolor">Kolor bierki</param>
 /// <param name="plansza">nowa plansza</param>
 /// <param name="pierwszyRuch">stan zmiennej pierwszy ruch</param>
 /// <param name="policzoneRuchy">policzone ruchy bierki</param>
 Goniec(Punkt pozycja, Strona kolor, Plansza plansza, bool pierwszyRuch, List <Punkt> policzoneRuchy, int kolejka)
 {
     this.Nazwa           = Bierki.Goniec;
     this.Pozycja         = pozycja;
     this.Kolor           = kolor;
     this.plansza         = plansza;
     this.PierwszyRuch    = pierwszyRuch;
     this.WartoscPunktowa = 3;
     this.policzoneRuchy  = policzoneRuchy;
     this.Kolejka         = kolejka;
 }
        Analiza(Plansza plansza, Strona strona, int analizaNr, int glebokoscAnalizy, Punkt ruchZ, Punkt ruchDo)
        {
            void Koniec(Plansza.Status status)
            {
                switch (status)
                {
                case Plansza.Status.Mat:
                    wartoscAnalizy = decimal.MaxValue;
                    analiza        = false;
                    break;

                case Plansza.Status.Pat:
                    wartoscAnalizy = 1;
                    analiza        = false;
                    break;
                }
            }
Exemple #4
0
        /// <summary>
        /// tworzenie listy możliwych do wykonania ruchow przez goncia
        /// </summary>
        /// <returns>zwraca listę punktów na które goniec moze się przemieścić</returns>
        protected override List <Punkt> MozliweRuchy()
        {
            List <Punkt> mozliweRuchy = new List <Punkt>();

            //goniec ma mozliwosc poruszania sie na skosy do konca planszy lub do napotkania na inna bierke
            //poruszanie sie na skos w gore i lewo
            for (int i = 1; i < 8; i++)
            {
                Punkt przemieszczenie = Pozycja - new Punkt(i, i);
                if (SprawdzMozliwoscWykonaniaRuchu(przemieszczenie, mozliweRuchy))
                {
                    break;
                }
            }
            //poruszanie sie na skos w gore i prawo
            for (int i = 1; i < 8; i++)
            {
                Punkt przemieszczenie = Pozycja - new Punkt(i, -i);
                if (SprawdzMozliwoscWykonaniaRuchu(przemieszczenie, mozliweRuchy))
                {
                    break;
                }
            }
            //poruszanie sie na skos w dol i prawo
            for (int i = 1; i < 8; i++)
            {
                Punkt przemieszczenie = Pozycja + new Punkt(i, i);
                if (SprawdzMozliwoscWykonaniaRuchu(przemieszczenie, mozliweRuchy))
                {
                    break;
                }
            }
            //poruszanie sie na skos w dol i lewo
            for (int i = 1; i < 8; i++)
            {
                Punkt przemieszczenie = Pozycja + new Punkt(i, -i);
                if (SprawdzMozliwoscWykonaniaRuchu(przemieszczenie, mozliweRuchy))
                {
                    break;
                }
            }

            return(mozliweRuchy);
        }
Exemple #5
0
        /// <summary>
        /// tworzenie listy możliwych do wykonania ruchow przez wieze
        /// </summary>
        /// <returns>zwraca listę punktów na które wieza moze się przemieścić</returns>
        protected override List <Punkt> MozliweRuchy()
        {
            List <Punkt> mozliweRuchy = new List <Punkt>();

            //wieza moze poruszac sie w kazdym kierunku tylko po liniach prostych
            //przemieszczenie w gore
            for (int i = 1; i < 8; i++)
            {
                Punkt przemieszczenie = Pozycja - new Punkt(0, i);
                if (SprawdzMozliwoscWykonaniaRuchu(przemieszczenie, mozliweRuchy))
                {
                    break;
                }
            }
            //przemieszczenie w dol
            for (int i = 1; i < 8; i++)
            {
                Punkt przemieszczenie = Pozycja + new Punkt(0, i);
                if (SprawdzMozliwoscWykonaniaRuchu(przemieszczenie, mozliweRuchy))
                {
                    break;
                }
            }
            //przemieszczenie w lewo
            for (int i = 1; i < 8; i++)
            {
                Punkt przemieszczenie = Pozycja - new Punkt(i, 0);
                if (SprawdzMozliwoscWykonaniaRuchu(przemieszczenie, mozliweRuchy))
                {
                    break;
                }
            }
            //przemieszczenie w prawo
            for (int i = 1; i < 8; i++)
            {
                Punkt przemieszczenie = Pozycja + new Punkt(i, 0);
                if (SprawdzMozliwoscWykonaniaRuchu(przemieszczenie, mozliweRuchy))
                {
                    break;
                }
            }

            return(mozliweRuchy);
        }
Exemple #6
0
        /// <summary>
        /// prubuje przemiescic bierke na wskazana pozycje
        /// </summary>
        /// <param name="przemieszczenie">pozycja na ktora ma sie przemiescic bierka</param>
        /// <returns>zwraca prawda jezeli udalo sie przemiescic bierke</returns>
        public override bool WykonajRuch(Punkt przemieszczenie)
        {
            //sprawdz czy przemieszczenie znajduje sie na liscie mozliwych ruchow
            if (PobMozliweRuchy.Contains(przemieszczenie))
            {
                PierwszyRuch = false;
                if (Pozycja - przemieszczenie == new Punkt(-2, 0))
                {
                    plansza.bierki.Find(x => x.Pozycja == Pozycja + new Punkt(3, 0)).Pozycja = Pozycja + new Punkt(1, 0);
                }
                if (Pozycja - przemieszczenie == new Punkt(2, 0))
                {
                    plansza.bierki.Find(x => x.Pozycja == Pozycja - new Punkt(4, 0)).Pozycja = Pozycja - new Punkt(1, 0);
                }
                Pozycja = przemieszczenie;

                return(true);
            }
            return(false);
        }
Exemple #7
0
 /// <summary>
 /// Test czy punkt do przemieszczenia spełnia warunki.
 /// </summary>
 /// <param name="przemieszczenie">Punkt na ktory przemieszcza sie bierka</param>
 /// <param name="ruchy">lista ruchów do ktorej nalezy dodac bierke</param>
 /// <param name="zbicie">czy jest akcja zbijania bierki</param>
 /// <returns>zwraca prawde jeżeli nie wykryto problemow z przemieszczeniem</returns>
 protected bool SprawdzMozliwoscWykonaniaRuchu(Punkt przemieszczenie, List <Punkt> ruchy, bool zbicie = true)
 {
     //sprawdzenie czy nadal znajdujemy sie na planszy
     if (przemieszczenie.Pomiedzy(7))
     {
         //sprawdzenie czy na danej pozycji znajduje sie bierka
         if (plansza.BierkaNaPozycji(przemieszczenie, out Bierka bierka))
         {
             //jezeli kolory sa rozne dodaj mozliwosc zbicia
             if ((bierka.Kolor != Kolor && zbicie) || Kolor != plansza.StronaGrajaca)
             {
                 ruchy.Add(przemieszczenie);
             }
             return(true);
         }
         ruchy.Add(przemieszczenie);
         return(false);
     }
     return(true);
 }
Exemple #8
0
        /// <summary>
        /// prubuje przemiescic bierke na wskazana pozycje
        /// </summary>
        /// <param name="przemieszczenie">pozycja na ktora ma sie przemiescic bierka</param>
        /// <returns>zwraca prawda jezeli udalo sie przemiescic bierke</returns>
        public override bool WykonajRuch(Punkt przemieszczenie)
        {
            //sprawdz czy przemieszczenie znajduje sie na liscie mozliwych ruchow
            if (PobMozliweRuchy.Contains(przemieszczenie))
            {
                if (przemieszczenie - Pozycja == new Punkt(-1, Strona) || przemieszczenie - Pozycja == new Punkt(1, Strona))
                {
                    if (!plansza.BierkaNaPozycji(przemieszczenie, out _))
                    {
                        plansza.ZbijBierke(przemieszczenie - new Punkt(0, Strona), (Kolor == LogikaSzachy.Strona.Biała) ? LogikaSzachy.Strona.Czarna : LogikaSzachy.Strona.Biała);
                    }
                }
                PierwszyRuch = false;
                Pozycja      = przemieszczenie;

                if (Pozycja.Y == 7 || Pozycja.Y == 0)
                {
                    plansza.PromocjaPionka(this);
                }
                plansza.zmianaStatusu = plansza.Ruchy;
                return(true);
            }
            return(false);
        }
Exemple #9
0
        /// <summary>
        /// tworzenie listy możliwych do wykonania ruchow przez pionka
        /// </summary>
        /// <returns>zwraca listę punktów na które pionek moze się przemieścić</returns>
        protected override List <Punkt> MozliweRuchy()
        {
            List <Punkt> mozliweRuchy = new List <Punkt>();

            //pinek ma możliwość przemieszczenia się o jedno pole na przod
            if (Kolor == plansza.StronaGrajaca)
            {
                if (!SprawdzMozliwoscWykonaniaRuchu(new Punkt(0, Strona) + Pozycja, mozliweRuchy, false))
                {
                    //na dwa pola na przod jezeli jest nie wykonal jeszcze zadnego ruchu
                    if (PierwszyRuch)
                    {
                        SprawdzMozliwoscWykonaniaRuchu(new Punkt(0, 2 * Strona) + Pozycja, mozliweRuchy, false);
                    }
                }
            }

            //zbijac na boki
            //w lewo
            Punkt zbicie = new Punkt(-1, Strona) + Pozycja;

            if (plansza.BierkaNaPozycji(zbicie, out Bierka bierka))
            {
                if (bierka.Kolor != Kolor)
                {
                    mozliweRuchy.Add(zbicie);
                }
            }
            // w prawo
            zbicie = new Punkt(1, Strona) + Pozycja;
            if (plansza.BierkaNaPozycji(zbicie, out bierka))
            {
                if (bierka.Kolor != Kolor)
                {
                    mozliweRuchy.Add(zbicie);
                }
            }

            //zbicie w przelocie
            //prawo
            zbicie = new Punkt(1, 0) + Pozycja;
            if (plansza.BierkaNaPozycji(zbicie, out bierka))
            {
                if (bierka.Kolor != Kolor)
                {
                    if (bierka.Nazwa == Bierki.Pionek)
                    {
                        if (plansza.WykonaneRuchy.Last().Item2 == zbicie && plansza.WykonaneRuchy.Last().Item1 == new Punkt(1, 2 * Strona) + Pozycja)
                        {
                            mozliweRuchy.Add(new Punkt(1, Strona) + Pozycja);
                        }
                    }
                }
            }
            if (plansza.StronaGrajaca != Kolor)
            {
                mozliweRuchy.Add(new Punkt(1, Strona) + Pozycja);
            }
            //lewo
            zbicie = new Punkt(-1, 0) + Pozycja;
            if (plansza.BierkaNaPozycji(zbicie, out bierka))
            {
                if (bierka.Kolor != Kolor)
                {
                    if (bierka.Nazwa == Bierki.Pionek)
                    {
                        if (plansza.WykonaneRuchy.Last().Item2 == zbicie && plansza.WykonaneRuchy.Last().Item1 == new Punkt(-1, 2 * Strona) + Pozycja)
                        {
                            mozliweRuchy.Add(new Punkt(-1, Strona) + Pozycja);
                        }
                    }
                }
            }
            if (plansza.StronaGrajaca != Kolor)
            {
                mozliweRuchy.Add(new Punkt(-1, Strona) + Pozycja);
            }

            return(mozliweRuchy);
        }
Exemple #10
0
        /// <summary>
        /// tworzenie listy możliwych do wykonania ruchow przez hetmana
        /// </summary>
        /// <returns>zwraca listę punktów na które hetman moze się przemieścić</returns>
        protected override List <Punkt> MozliweRuchy()
        {
            List <Punkt> mozliweRuchy = new List <Punkt>();

            //hetman moze sie poruszac w kazdym kierunku zarowno po skosie jak i po liniach prostych
            //przemieszczenie w gore
            for (int i = 1; i < 8; i++)
            {
                Punkt przemieszczenie = Pozycja - new Punkt(0, i);
                if (SprawdzMozliwoscWykonaniaRuchu(przemieszczenie, mozliweRuchy))
                {
                    break;
                }
            }
            //przemieszczenie w dol
            for (int i = 1; i < 8; i++)
            {
                Punkt przemieszczenie = Pozycja + new Punkt(0, i);
                if (SprawdzMozliwoscWykonaniaRuchu(przemieszczenie, mozliweRuchy))
                {
                    break;
                }
            }
            //przemieszczenie w lewo
            for (int i = 1; i < 8; i++)
            {
                Punkt przemieszczenie = Pozycja - new Punkt(i, 0);
                if (SprawdzMozliwoscWykonaniaRuchu(przemieszczenie, mozliweRuchy))
                {
                    break;
                }
            }
            //przemieszczenie w prawo
            for (int i = 1; i < 8; i++)
            {
                Punkt przemieszczenie = Pozycja + new Punkt(i, 0);
                if (SprawdzMozliwoscWykonaniaRuchu(przemieszczenie, mozliweRuchy))
                {
                    break;
                }
            }
            //poruszanie sie na skos w gore i lewo
            for (int i = 1; i < 8; i++)
            {
                Punkt przemieszczenie = Pozycja - new Punkt(i, i);
                if (SprawdzMozliwoscWykonaniaRuchu(przemieszczenie, mozliweRuchy))
                {
                    break;
                }
            }
            //poruszanie sie na skos w gore i prawo
            for (int i = 1; i < 8; i++)
            {
                Punkt przemieszczenie = Pozycja - new Punkt(i, -i);
                if (SprawdzMozliwoscWykonaniaRuchu(przemieszczenie, mozliweRuchy))
                {
                    break;
                }
            }
            //poruszanie sie na skos w dol i prawo
            for (int i = 1; i < 8; i++)
            {
                Punkt przemieszczenie = Pozycja + new Punkt(i, i);
                if (SprawdzMozliwoscWykonaniaRuchu(przemieszczenie, mozliweRuchy))
                {
                    break;
                }
            }
            //poruszanie sie na skos w dol i lewo
            for (int i = 1; i < 8; i++)
            {
                Punkt przemieszczenie = Pozycja + new Punkt(i, -i);
                if (SprawdzMozliwoscWykonaniaRuchu(przemieszczenie, mozliweRuchy))
                {
                    break;
                }
            }

            return(mozliweRuchy);
        }
Exemple #11
0
 /// <summary>
 /// Konstruktor punktu
 /// </summary>
 /// <param name="punkt">punkt na podstawie którego tworzy</param>
 public Punkt(Punkt punkt)
 {
     X = punkt.X;
     Y = punkt.Y;
 }