コード例 #1
0
 public bool Czy_Rozne(Wierz w)//wykrywa czy nie sa takie same wierzchloki
 {
     for (int g = 0; g < 2; g++)
     {
         for (int i = 0; i < 12; i++)
         {
             if (gra.pionki[g][i].aktywny == w.gra.pionki[g][i].aktywny)
             {
                 if (gra.pionki[g][i].god != w.gra.pionki[g][i].god)
                 {
                     return(true);
                 }
                 if ((gra.pionki[g][i].w != w.gra.pionki[g][i].w) || (gra.pionki[g][i].r != w.gra.pionki[g][i].r))
                 {
                     return(true);
                 }
             }
             else
             {
                 return(true);
             }
         }
     }
     return(false);
 }
コード例 #2
0
        int gracz, wrog;   //kto jest kim


        public Graf(Gra stan, int g)
        {
            W      = new List <Wierz>();
            K      = new List <Kraw>();
            liscie = new List <Wierz>();


            gracz = g;
            if (gracz == 0)
            {
                wrog = 1;
            }
            else
            {
                wrog = 0;
            }

            Wierz w = new Wierz();

            w.gra = stan;
            Wierz ww = new Wierz(w, gracz);

            W.Add(ww);



            BudujGraf(Warstw.warstw);

            Wierz najlepsze;
            bool  over = false;

            for (int prog = BETA_MAX; prog != ALFA_MIN - 1; prog--)
            {
                if (!over)
                {
                    foreach (Wierz wyn in liscie)
                    {
                        if (!over)
                        {
                            if (prog == wyn.waga)
                            {
                                najlepsze = wyn;

                                foreach (Kraw ruch in K)
                                {
                                    if (ruch.k == najlepsze && ruch.p == ww)
                                    {
                                        wynik = ruch;
                                        over  = true;
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #3
0
        public void  BudujGraf(int glebokosc)
        {
            foreach (Wierz w in W)
            {
                liscie.Add(w);
            }
            liscie = RozwinWarstwe(liscie);

            foreach (Wierz w in liscie)
            {
                Wierz ruch = w;
                ruch.waga = MinMax(ruch, glebokosc - 1);
            }
        }
コード例 #4
0
        List <Wierz> RozwinWierz(Wierz w)         //robi dla w :-dzieci(zruchem) -dodaje do list
        {
            List <Wierz> lw = new List <Wierz>(); //nowe wierzcholki od ojca

            Pionek p = new Pionek(0);

            Wierz nowy_wierz = new Wierz(w, gracz);


            void p_cel(int y, int x)
            {
                p.w = y;
                p.r = x;
            }

            foreach (Pionek t in w.gra.pionki[w.gra.kolej])
            {
                if (t.aktywny)
                {
                    for (int y = 0; y < 8; y++)
                    {
                        for (int x = 0; x < 8; x++)
                        {
                            p_cel(y, x);

                            if (nowy_wierz.Zagraj(t, p))
                            {
                                Kraw nowa_kraw = new Kraw(w, nowy_wierz);
                                nowa_kraw.p1 = new Pionek(t);
                                nowa_kraw.p2 = new Pionek(p);

                                {
                                    lw.Add(nowy_wierz);
                                    W.Add(nowy_wierz);
                                    K.Add(nowa_kraw);
                                }
                                nowy_wierz = new Wierz(w, gracz);
                            }
                        }
                    }
                }
            }

            w.rozwiniety = true;



            //dodaje do lisci//czyli swierza nowa warstwa
            return(lw);
        }
コード例 #5
0
        bool Dolacz(Wierz w, Kraw k)
        {
            foreach (Wierz w_w in W)
            {
                if (!w_w.Czy_Rozne(w))
                {
                    return(false);
                }
            }

            W.Add(w);
            K.Add(k);

            return(true);
        }
コード例 #6
0
        int AlfaBeta(Wierz w, int glebokosc, int alfa, int beta)
        {
            if ((w.gra.koniec) || (glebokosc == 0))
            {
                return(w.waga);
            }

            if (w.gra.kolej == wrog)
            {
                List <Wierz> potomki = RozwinWierz(w);
                foreach (Wierz potomek in potomki)
                {
                    beta = Math.Min(beta, AlfaBeta(potomek, glebokosc - 1, alfa, beta));
                    if (alfa >= beta)
                    {
                        //odcinamy galaz alfa
                        break;
                    }
                }
                return(beta);
            }
            else
            {
                List <Wierz> potomki = RozwinWierz(w);
                foreach (Wierz potomek in potomki)
                {
                    alfa = Math.Max(alfa, AlfaBeta(potomek, glebokosc - 1, alfa, beta));
                    if (alfa >= beta)
                    {
                        //odcinamy galaz beta
                        break;
                    }
                }
                return(alfa);
            }
        }
コード例 #7
0
 int MinMax(Wierz w, int glebokosc)
 {
     return(AlfaBeta(w, glebokosc, ALFA_MIN, BETA_MAX));
 }
コード例 #8
0
 public Wierz(Wierz f, int g)
 {
     gra        = new Gra(f.gra);
     rozwiniety = false;
     waga       = Waga(gra, g);
 }
コード例 #9
0
 public Kraw(Wierz father, Wierz son)
 {
     p = father;
     k = son;
 }