// 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); }
// 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)); } }