public Move() { Karte = new List <Karta>(); PrethodnoStanje = new ContextMakao(); NarednoStanje = new ContextMakao(); //NovaBoja = Boja.Unknown; //15.1 }
public ContextMakao(ContextMakao makao) { NaPotezu = makao.NaPotezu; Value = makao.Value; stop = makao.Stop; TrenutnoStanje = new Tabla(makao.TrenutnoStanje); }
public Move(ContextMakao prethodnoSt, ContextMakao narednoSt) { Karte = new List <Karta>(); PrethodnoStanje = prethodnoSt; NarednoStanje = narednoSt; // NovaBoja = Boja.Unknown; 15.1 Value = 0; }
void IterativeDeepening() { int i = 1; while (true) { BestMove = ContextMakao.AlfaBeta(context, i, int.MinValue, int.MaxValue); i++; } }
public Move(Move im) { Karte = new List <Karta>(); Tip = im.Tip; foreach (Karta k in im.Karte) { Karte.Add(k); } NovaBoja = im.NovaBoja; //PrethodnoStanje = new ContextMakao(new ContextMakao()); //15.1 // NarednoStanje = new ContextMakao(new ContextMakao()); //15.1 PrethodnoStanje = new ContextMakao(im.PrethodnoStanje); NarednoStanje = new ContextMakao(im.NarednoStanje); Value = im.Value; }
public void BeginBestMove() { stani = false; // Task.Run(() => { int i = 1; while (true) { if (stani) { stani = false; break; } BestMove = ContextMakao.AlfaBeta(context, i, int.MinValue, int.MaxValue); i++; } } // ); }
public object Clone() { ContextMakao a = (ContextMakao)this.MemberwiseClone(); return(a); }
public static Move AlfaBeta(ContextMakao stanje, int dubina, int alfa, int beta) { if (stop) { return(null); } if (stanje == null) { return(null); } List <Move> potezi = stanje.GetListaMogucihPoteza(); if (TranspozicionaTabela.Sadrzi(stanje)) { HashElement tmp = TranspozicionaTabela.VratiEl(stanje); if (tmp.Dubina >= dubina) { return(tmp.Nabolji); } else { potezi.Insert(0, tmp.Nabolji); } } if (TranspozicionaTabela.Sadrzi(stanje) && TranspozicionaTabela.VratiEl(stanje).Dubina < dubina) { Move najbolji = TranspozicionaTabela.VratiEl(stanje).Nabolji; } if (dubina == 0 || potezi.Count == 0) { Move pom = new Move(); pom.Value = stanje.Evaluate(); pom.NarednoStanje = null; //Careful we still don't know what move is the best return(pom); } else if (stanje.NaPotezu == 1) //komp { Move temp = new Move(); temp.Value = Int32.MinValue; int alfa1 = Int32.MinValue; foreach (var sledecciPotez in potezi) { if (TranspozicionaTabela.Sadrzi(stanje)) { alfa1 = TranspozicionaTabela.VratiEl(stanje).Alfa; } Move b = AlfaBeta(sledecciPotez.NarednoStanje, dubina - 1, alfa1, beta); if (b.Value > temp.Value) { temp = sledecciPotez; temp.Value = b.Value; } if (alfa1 < temp.Value) { alfa1 = temp.Value; } if (beta <= alfa1) { break; } } if (TranspozicionaTabela.Sadrzi(stanje)) { HashElement pom = TranspozicionaTabela.VratiEl(stanje); if (pom.Dubina <= dubina) { pom.Alfa = alfa1; pom.Dubina = dubina; pom.Nabolji = temp; pom.Beta = beta; pom.Flag = 0; } } else { HashElement pom = new HashElement { Alfa = alfa1, Dubina = dubina, Nabolji = temp, Beta = beta, Flag = 0 }; TranspozicionaTabela.Add(stanje, pom); } return(temp); } else { if (TranspozicionaTabela.Sadrzi(stanje)) { HashElement el = TranspozicionaTabela.VratiEl(stanje); if (el.Dubina >= dubina) { return(el.Nabolji); } } Move temp = new Move(); temp.Value = Int32.MaxValue; int beta1 = Int32.MaxValue; foreach (var sledeciPotez in potezi) { if (TranspozicionaTabela.Sadrzi(stanje)) { beta1 = TranspozicionaTabela.VratiEl(stanje).Beta; } Move b = AlfaBeta(sledeciPotez.NarednoStanje, dubina - 1, alfa, beta1); if (b.Value < temp.Value) { temp = sledeciPotez; temp.Value = b.Value; } if (beta1 > temp.Value) { beta1 = temp.Value; } if (beta1 <= alfa) { break; } } if (TranspozicionaTabela.Sadrzi(stanje)) { HashElement tmp = TranspozicionaTabela.VratiEl(stanje); if (tmp.Dubina <= dubina) { tmp.Alfa = alfa; tmp.Beta = dubina; tmp.Nabolji = temp; tmp.Beta = beta1; tmp.Flag = 0; } } else { HashElement pom = new HashElement { Nabolji = temp, Alfa = alfa, Beta = beta1, Flag = 0, Dubina = dubina }; TranspozicionaTabela.Add(stanje, pom); } return(temp); } }
public Igra(ContextMakao km) { context = new ContextMakao(km); stani = false; BestMove = new Move(); }
public Igra(ContextMakao km, int i) { context = km; stani = false; BestMove = new Move(); }
public Igra() { this.context = new ContextMakao(); stani = false; }
public void Reset() { this.context = new ContextMakao(); stani = false; }