Esempio n. 1
0
        // pomoci deskaCopy zkousim pozdeji legalnost mych tahu:
        public Deska ZkusZahratTah(Tah tah)
        {
            List <Pozice> seznamPozic = tah.GetSeznamPozic;
            Pozice        odkud       = null;
            Deska         deskaCopy   = cloneDJ();

            if (seznamPozic.Count() == 2)
            {
                Pozice kam;
                odkud = seznamPozic[0];
                if (deskaCopy.ProvedPosunKamene(odkud, kam = seznamPozic[1], tah))
                {
                    return(deskaCopy);
                }
                return(null);
            }

            foreach (Pozice kam in seznamPozic)
            {
                if (odkud != null && !deskaCopy.JePosunPreskokemKameneProtihrace(odkud, kam))
                {
                    return(null);
                }
                if (odkud != null)
                {
                    deskaCopy.ProvedPosunKamene(odkud, kam, tah);
                }
                odkud = kam;
            }
            return(deskaCopy);
        }
Esempio n. 2
0
        // Generuje vsechny mozne tahy:
        private List <Tah> GenerujTahy(Deska deska, Hrac hracNaTahu)
        {
            List <Tah>    vygenerovaneTahy           = new List <Tah>();
            List <Pozice> kamenyHrace                = hracNaTahu.VratKameny();
            List <Tah>    vygenerovaneTahySPreskokem = new List <Tah>();

            foreach (Pozice odkud in kamenyHrace)
            {
                foreach (Pozice kam in VratPoziceKamJdeSkocit(deska, odkud, false))
                {
                    List <Pozice> poziceProTah = new List <Pozice>();
                    poziceProTah.Add(odkud);
                    poziceProTah.Add(kam);
                    if (deska.JePosunPreskokemKameneProtihrace(odkud, kam))
                    {
                        List <Tah> seznamVygenerovanychTahu = new List <Tah>();
                        deska.ProvedPosunKamene(odkud, kam, null);
                        GenerujTahyPreskoku(kam, deska, poziceProTah, seznamVygenerovanychTahu);
                        // tady se mi stradaji tahy, ktere jsou preskokem:
                        vygenerovaneTahySPreskokem.AddRange(seznamVygenerovanychTahu);
                        deska.VratZpetPosunKamene(kam, odkud, deska.VratPoziciMeziPosunem(kam, odkud));
                        continue;
                    }
                    vygenerovaneTahy.Add(MainWindow.VytvorTah(poziceProTah));
                }
            }

            // Zamicham vypocitane tahy bez preskoku
            Zamichej(vygenerovaneTahy);
            // A pro ucinnejsi orezavani v alfa-beta alg. pridam na zacatek seznamu nejsilnejsi tahy, zrychluje to vypocet pomerne hodne
            vygenerovaneTahy.InsertRange(0, vygenerovaneTahySPreskokem);
            return(vygenerovaneTahy);
        }
Esempio n. 3
0
        // Generuje tahy  - Pouze Preskoku:
        public void GenerujTahyPreskoku(Pozice odkud, Deska deska, List <Pozice> seznamPozicPreskoku, List <Tah> seznamVygenerovanychTahu)
        {
            List <Pozice> seznamPreskoku   = new List <Pozice>(seznamPozicPreskoku);
            List <Pozice> poziceProPreskok = VratPoziceKamJdeSkocit(deska, odkud, true); // negace true je false - budu zjistovat preskoky

            if (poziceProPreskok.Count() == 0)
            {
                seznamVygenerovanychTahu.Add(MainWindow.VytvorTah(new List <Pozice>(seznamPreskoku)));
                return;
            }

            foreach (Pozice kam in poziceProPreskok)
            {
                seznamPreskoku.Add(kam);
                deska.ProvedPosunKamene(odkud, kam, null);
                GenerujTahyPreskoku(kam, deska, seznamPreskoku, seznamVygenerovanychTahu);
                int index = seznamPreskoku.Count() - 1;
                seznamPreskoku.RemoveAt(index);
                deska.VratZpetPosunKamene(kam, odkud, deska.VratPoziciMeziPosunem(kam, odkud));
            }
        }