示例#1
0
        // algoritmus alfa-beta
        private int Alfabeta(Deska deska, int hloubka, Hrac hracKteryHral, int alfa, int beta)
        {
            List <Tah> tahy       = new List <Tah>();
            Hrac       hracNaTahu = dispecerHry.VratProtihrace(hracKteryHral);

            // zakladni podminky:
            if (dispecerHry.GetHra.HracProhral(hracNaTahu))
            {
                return(-MAX);
            }
            if (dispecerHry.GetHra.HracVyhral(hracNaTahu))
            {
                return(MAX);
            }
            if (dispecerHry.GetHra.JeRemiza())
            {
                return(0);
            }
            if (hloubka == 0)
            {
                return(OhodnotPozici(deska, hracNaTahu));
            }

            tahy = GenerujTahy(deska, hracNaTahu);

            for (int i = 0; i < tahy.Count(); ++i)
            {
                deska.ZahrajTah(tahy[i]);
                int cena = -Alfabeta(deska, hloubka - 1, hracNaTahu, Dal(-beta), Dal(-alfa));
                cena = Bliz(cena);
                deska.vratTahZpet(tahy[i]);
                if (cena > alfa)
                {
                    alfa = cena;
                    if (cena >= beta)
                    {
                        return(beta);
                    }
                }
            }
            return(alfa);
        }
示例#2
0
        public void PridejDoHistorie(Tah tah, bool kopie)
        {
            ObservableCollection <string> tahy          = new ObservableCollection <string>();
            ObservableCollection <string> stavajiciTahy = new ObservableCollection <string>();

            dispecer2 = MainWindow.GetDispecerHry();

            // Vypis preskocenych kamenu:
            string preskoceneKameny = "";

            foreach (Pozice pozice in tah.GetPreskoceneKameny)
            {
                preskoceneKameny += pozice.VratJakoText();
            }

            // muj oficialni seznam tahu v Historii tahu tvoreny ciste tridami Tah
            cistySeznamOdehranychTahu.Add(tah);
            SetPocetTahuCelkem = cistySeznamOdehranychTahu.Count();

            // tady v historii budu ukladat pocet tahu bez preskoku:
            int pocetBP = dispecer2.GetHra.GetPocetTahuBezPreskoku;

            int    aktualniIndexTahu = cistySeznamOdehranychTahu.Count();
            string jmenoHrace;
            Hrac   kdoJeNaTahu = dispecer2.GetHracNaTahu;
            Hrac   protiHrac   = dispecer2.VratProtihrace(kdoJeNaTahu);

            if (kopie == true)
            {
                jmenoHrace = protiHrac.GetJmeno;
            }
            else
            {
                jmenoHrace = kdoJeNaTahu.GetJmeno;
            }
            string jedenTah = aktualniIndexTahu + ".tah " + jmenoHrace + " " + tah.ToString();

            if (preskoceneKameny != "")
            {
                int pulka = preskoceneKameny.Length / 2;
                if (dispecer2.GetHracNaTahu.GetJePocitacovyHrac)
                {
                    preskoceneKameny = preskoceneKameny.Substring(0, pulka);
                }
                jedenTah += " odstraněno " + preskoceneKameny.ToUpper();
            }

            tahy = GetTahyVypsaneDetailne;
            tahy.Add(jedenTah);
            SetTahyVypsaneDetilane = tahy;
            VyvolejZmenu("TahyDoH");
            VyvolejZmenu("GetTahyVypsaneDetailne");
        }
示例#3
0
 // Vyhra je prohra druheho:
 public bool HracVyhral(Hrac hrac)
 {
     return(HracProhral(dispecerHry.VratProtihrace(hrac)));
 }