/// <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); }
/// <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; } }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <summary> /// Konstruktor punktu /// </summary> /// <param name="punkt">punkt na podstawie którego tworzy</param> public Punkt(Punkt punkt) { X = punkt.X; Y = punkt.Y; }