Example #1
0
        public bool przesun(int x, int y, bool pgn)
        {
            bool ret = false;

            if (this.mozliweRuchy.Contains(new Point(x, y)))
            {
                //if (this.kolor == Enums.Kolor_pionków.Biale && Gracz_Czlowiek.szach && this.GetType() != typeof(Krol))
                //{
                //    MessageBox.Show("Jest szach. Należy ruszyć się królem.");
                //    return false;
                //}


                this.pozycjaX = x;
                this.pozycjaY = y;
                ret           = true;

                // funkcja podzielona na dwie, ponieważ ta sama funkcja uzywana jest
                // do symulowania zachowania gracza i do przestawiania bierek przez mechanizm sztucznej inteligencji
                // a gdy algorytm coś oblicza, to nie chcemy sumować liczby wykonanych ruchów. chcemy
                // jedynie zmieniać współrzędne bierek
                if (pgn)
                {
                    this.generujMozliweRuchy(Gra.bierkiBiale, Gra.bierkiCzarne);
                    this.wyczyscMozliweRuchyZeSmieci();
                    this.bylRuch = true;

                    string numer = string.Empty;
                    Gra.ileRuchow++;
                    int ktoryNumer = Gra.ileRuchow / 2;
                    ktoryNumer++;
                    if (Gra.ileRuchow % 2 == 1)
                    {
                        numer = " " + ktoryNumer + ". ";
                    }
                    else
                    {
                        numer = " ";
                    }
                    Gra.pgnString += numer + this.litera + Gra.tlumaczNazwePolaPGN(x, y).ToLower().Trim();



                    Gra.ustawSzach(Gra.bierkiBiale, Gra.bierkiCzarne);
                    if (Gracz_Czlowiek.szach)
                    {
                        MessageBox.Show("Zaszachowano gracza");
                        Bierka.wygenerujMozliweRuchyKrola();
                    }
                    if (Gracz_Komputer.szach)
                    {
                        MessageBox.Show("Zaszachowano komputer");
                        Bierka.wygenerujMozliweRuchyKrola();
                    }
                }
            }

            return(ret);
        }
Example #2
0
        static public void roszada(Bierka wieza, Bierka krol, Enums.Roszada typRoszady)
        {
            int    pozycjaXKrola = 0;     // docelowa pozycja krola
            int    pozycjaXWiezy = 0;     // docelowa pozycja wieży
            string PGN           = "0-0"; // dla krotkiej roszady

            if (typRoszady == Enums.Roszada.Dluga)
            {
                pozycjaXKrola = 2;
                pozycjaXWiezy = 3;
                PGN          += "-0";
            }
            else
            {
                pozycjaXKrola = 6;
                pozycjaXWiezy = 5;
            }

            // pozycje Y się nie zmieniają.
            wieza.pozycjaX = pozycjaXWiezy;
            krol.pozycjaX  = pozycjaXKrola;

            // wygenerowanie możliwych ruchów dla biurerk, które biorą udział w roszadzie
            wieza.generujMozliweRuchy(Gra.bierkiBiale, Gra.bierkiCzarne);
            wieza.wyczyscMozliweRuchyZeSmieci();
            wieza.bylRuch = true;
            krol.generujMozliweRuchy(Gra.bierkiBiale, Gra.bierkiCzarne);
            krol.wyczyscMozliweRuchyZeSmieci();
            krol.bylRuch = true;

            string numer = string.Empty;

            Gra.ileRuchow++;
            int ktoryNumer = Gra.ileRuchow / 2;

            ktoryNumer++;
            if (Gra.ileRuchow % 2 == 1)
            {
                numer = " " + ktoryNumer + ". ";
            }
            else
            {
                numer = " ";
            }
            Gra.pgnString += numer + PGN;


            Gra.ustawSzach(Gra.bierkiBiale, Gra.bierkiCzarne);
            if (Gracz_Czlowiek.szach)
            {
                MessageBox.Show("Zaszachowano gracza");
                Bierka.wygenerujMozliweRuchyKrola();
            }
            if (Gracz_Komputer.szach)
            {
                MessageBox.Show("Zaszachowano komputer");
                Bierka.wygenerujMozliweRuchyKrola();
            }
        }
Example #3
0
        public bool zbij(Bierka ofiara)
        {
            bool ret = false;

            if (ofiara != null)
            {
                if (this.mozliweBicia.Contains(new Point(ofiara.pozycjaX, ofiara.pozycjaY)))
                {
                    //  if (ofiara.ToString() == "Krol") MessageBox.Show("Nie można bić króla");
                    //  else
                    //   {

                    int pozycjaTMPX = this.pozycjaX;

                    this.pozycjaX = ofiara.pozycjaX;
                    this.pozycjaY = ofiara.pozycjaY;
                    this.bylRuch  = true;
                    ret           = true;

                    if (ofiara.kolor == Enums.Kolor_pionków.Biale)
                    {
                        Gra.bierkiBiale.Remove(ofiara);
                    }
                    else
                    {
                        Gra.bierkiCzarne.Remove(ofiara);
                    }

                    this.generujMozliweRuchy(Gra.bierkiBiale, Gra.bierkiCzarne);
                    this.wyczyscMozliweRuchyZeSmieci();

                    Gra.ileRuchow++;
                    string numer  = string.Empty;
                    string pionek = string.Empty;

                    if (this.GetType() == typeof(Pionek))
                    {
                        pionek = Gra.tlumaczNazweKolumny(pozycjaTMPX).ToLower();
                    }

                    int ktoryNumer = Gra.ileRuchow / 2;
                    ktoryNumer++;
                    if (Gra.ileRuchow % 2 == 1)
                    {
                        numer = " " + ktoryNumer + ". ";
                    }
                    else
                    {
                        numer = " ";
                    }
                    Gra.pgnString += numer + pionek + this.litera + "x" + Gra.tlumaczNazwePolaPGN(ofiara.pozycjaX, ofiara.pozycjaY).ToLower().Trim();
                }
                // }
            }
            else
            {
                MessageBox.Show("coś się popsuło");
                Bierka.przeliczWszystieRuchy();
            }

            return(ret);
        }
        static public RuchDrzewo wykonajNajlepszyRuch(List <Bierka> listaBiale, List <Bierka> listaCzarne)
        {
            int    punktyMax   = 0;
            Bierka wybrana     = new Bierka();
            Point  wybranyRuch = new Point();
            bool   czyBicie    = false;

            //  List<Bierka> listaBiale = new List<Bierka>();
            //  listaBiale = Tools.klonujBierki(Gra.bierkiBiale);

            foreach (Bierka b in listaBiale)
            {
                List <Point> listaP = new List <Point>();
                listaP = Tools.klonujPointy(b.mozliweRuchy);

                List <Point> listaP1 = new List <Point>();
                listaP1 = Tools.klonujPointy(b.mozliweBicia);

                int x = b.pozycjaX;
                int y = b.pozycjaY;

                foreach (Point p in listaP.Union(listaP1))
                {
                    bool bicie = false;
                    // List<Bierka> listaczarne = new List<Bierka>();
                    // listaczarne = Tools.klonujBierki(Gra.bierkiCzarne);
                    Bierka zbita = null;
                    bicie = false;

                    if (b.mozliweBicia.Contains(p))
                    {
                        zbita = Bierka.getBierkaByPos(p.X, p.Y, listaBiale, listaCzarne);
                        listaCzarne.Remove(zbita);
                        bicie = true;
                    }
                    else
                    {
                        b.przesun(p.X, p.Y, false);
                    }

                    Bierka.przeliczWszystieRuchy(listaBiale, listaCzarne);

                    int wynikBiale  = Bierka.getPunktacjaListyBierek(listaBiale, listaBiale, listaCzarne);
                    int wynikCzarne = Bierka.getPunktacjaListyBierek(listaCzarne, listaBiale, listaCzarne);

                    int roznica = wynikBiale - wynikCzarne;

                    if (punktyMax < roznica)
                    {
                        punktyMax   = roznica;
                        wybrana     = b;
                        wybranyRuch = p;
                        czyBicie    = bicie;
                    }

                    // przywracam zbit¹ bierkê
                    if (zbita != null)
                    {
                        listaCzarne.Add(zbita);
                    }

                    // cofam bierkê
                    b.pozycjaX = x;
                    b.pozycjaY = y;
                    Bierka.przeliczWszystieRuchy(listaBiale, listaCzarne);
                }
            }

            string pozycjaWybranej = Gra.tlumaczNazwePolaPGN(wybrana.pozycjaX, wybrana.pozycjaY);
            string pozycjadocelowa = Gra.tlumaczNazwePolaPGN(wybranyRuch.X, wybranyRuch.Y);

            RuchDrzewo ruch = new RuchDrzewo(wybrana, wybranyRuch, punktyMax, czyBicie);


            return(ruch);
        }