// 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); }
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"); }
// Vyhra je prohra druheho: public bool HracVyhral(Hrac hrac) { return(HracProhral(dispecerHry.VratProtihrace(hrac))); }