public virtual UInt64[] giveBestMove(int layers, Move move) { List <UInt64[]> possibleMove; if (transpTable.TryGetValue(move.toString(), out possibleMove)) { // Key was in dictionary; } else { possibleMove = Calculator.AllPossible(move, this.Color); transpTable.Add(move.toString(), possibleMove); } int i = 0; int best; if (Color) { best = -999999999; } else { best = 999999999; } Move newerMove; int besti = 0; movesCount = possibleMove.Count; firstLayer = movesCount; int ret; while (i < movesCount) { newerMove = move.MakeAMove(possibleMove[i][0] , possibleMove[i][1] , false); if (move.num >= 9 && move.toString() == move.previousMove.previousMove.previousMove.previousMove.toString() && move.toString() == move.previousMove.previousMove.previousMove.previousMove.previousMove.previousMove.previousMove.previousMove.toString() ) //der dritte move in folge ist gleich { ret = 0; //patt Console.WriteLine("instant patt"); Console.Read(); } else { if (move.promotion) { move.promote("queen"); } ret = findBestMove(layers - 1, newerMove, -999999999, 999999999); } if (!Color) { if (ret < best) { besti = i; if (ret == -999999999) { return(possibleMove[i]); } best = ret; } } else { if (ret > best) { besti = i; if (ret == 999999999) { return(possibleMove[i]); } best = ret; } } move.reset(); this.percentFinished = (float)i / movesCount * 100; myForm.Invoke(myForm.DelegateCount); i++; } this.percentFinished = 100; myForm.Invoke(myForm.DelegateCount); if (i != 0) { return(possibleMove[besti]); } else { return(new UInt64[] { 0, 0 }); } }
protected int findBestMove(int layer, Move move, int alpha, int beta) { if (layer == 0) { evaluatedPositions++; return(evaluateBoard(move.BoardAfter)); //return evaluateBoardPlus(move); } else { Move newerMove; List <UInt64[]> possibleMove; int movecount; if (transpTable.TryGetValue(move.toString(), out possibleMove)) { // Key was in dictionary; "value" contains corresponding value } else { possibleMove = Calculator.AllPossible(move, move.turn); transpTable.Add(move.toString(), possibleMove); } movecount = possibleMove.Count; if (move.turn)//weiss { for (var i = 0; i < movecount; i++) { newerMove = move.MakeAMove(possibleMove[i][0] , possibleMove[i][1] , false); if (move.num >= 9 && move.toString() == move.previousMove.previousMove.previousMove.previousMove.toString() && move.toString() == move.previousMove.previousMove.previousMove.previousMove.previousMove.previousMove.previousMove.previousMove.toString() ) //der dritte move in folge ist gleich { return(0); //patt } if (newerMove.promotion) { newerMove.promote("queen"); } alpha = Math.Max(alpha, findBestMove(layer - 1, newerMove, alpha, beta)); move.reset(); if (beta < alpha) { break; } } if (movecount == 0) { if (move.AmIInCheck()) { return(-999999999); } else { return(0); } } return(alpha); } else { for (var i = 0; i < movecount; i++) { newerMove = move.MakeAMove(possibleMove[i][0] , possibleMove[i][1] , false); beta = Math.Min(beta, findBestMove(layer - 1, newerMove, alpha, beta)); move.reset(); if (beta < alpha) { break; } } if (movecount == 0) { if (move.AmIInCheck()) { return(999999999); } else { return(0); } } return(beta); } } }
//----------------------------------------------------------------------------------------------------------------------- private void kaartTekenen(string columnName, DataTable table, string zijde) { Dictionary <ProvincieEnum, int> provincieScore2 = new Dictionary <ProvincieEnum, int>(); for (int provincieIndex = 0; provincieIndex < Constants.aantalProvincies; provincieIndex++) { var huidigeProvincieScore = Convert.ToInt32(table.Rows[provincieIndex][columnName]); var provincie = (ProvincieEnum)provincieIndex; provincieScore2[provincie] = huidigeProvincieScore; } var drentheScore = provincieScore2[ProvincieEnum.Drenthe]; var flevolandScore = provincieScore2[ProvincieEnum.Flevoland]; var frieslandScore = provincieScore2[ProvincieEnum.Friesland]; var gelderlandScore = provincieScore2[ProvincieEnum.Gelderland]; var groningenScore = provincieScore2[ProvincieEnum.Groningen]; var limburgScore = provincieScore2[ProvincieEnum.Limburg]; var noordBrabantScore = provincieScore2[ProvincieEnum.NoordBrabant]; var noordHollandScore = provincieScore2[ProvincieEnum.NoordHolland]; var overijsselScore = provincieScore2[ProvincieEnum.Overijssel]; var utrechtScore = provincieScore2[ProvincieEnum.Utrecht]; var zeelandScore = provincieScore2[ProvincieEnum.Zeeland]; var zuidHollandScore = provincieScore2[ProvincieEnum.ZuidHolland]; var maximum = drentheScore; var minimum = drentheScore; for (int count = 1; count < Constants.aantalProvincies; count++) { maximum = Calculator.Maximum(maximum, Convert.ToInt32(table.Rows[count][columnName])); minimum = Calculator.Minimum(minimum, Convert.ToInt32(table.Rows[count][columnName])); } var newDrentheScore = Calculator.Difference(minimum, maximum, drentheScore); var newflevolandScore = Calculator.Difference(minimum, maximum, flevolandScore); var newfrieslandScore = Calculator.Difference(minimum, maximum, frieslandScore); var newgelderlandScore = Calculator.Difference(minimum, maximum, gelderlandScore); var newgroningenScore = Calculator.Difference(minimum, maximum, groningenScore); var newlimburgScore = Calculator.Difference(minimum, maximum, limburgScore); var newnoordBrabantScore = Calculator.Difference(minimum, maximum, noordBrabantScore); var newnoordHollandScore = Calculator.Difference(minimum, maximum, noordHollandScore); var newoverijsselScore = Calculator.Difference(minimum, maximum, overijsselScore); var newutrechtScore = Calculator.Difference(minimum, maximum, utrechtScore); var newzeelandScore = Calculator.Difference(minimum, maximum, zeelandScore); var newzuidHollandScore = Calculator.Difference(minimum, maximum, zuidHollandScore); System.Resources.ResourceManager resourceManager = Properties.Resources.ResourceManager; var drentheObj = resourceManager.GetObject("DR" + newDrentheScore); var flevolandObj = resourceManager.GetObject("FL" + newflevolandScore); var frieslandObj = resourceManager.GetObject("FR" + newfrieslandScore); var gelderlandObj = resourceManager.GetObject("GL" + newgelderlandScore); var groningenObj = resourceManager.GetObject("GR" + newgroningenScore); var limburgObj = resourceManager.GetObject("LB" + newlimburgScore); var noordbObj = resourceManager.GetObject("NB" + newnoordBrabantScore); var noordhObj = resourceManager.GetObject("NH" + newnoordHollandScore); var overijsselObj = resourceManager.GetObject("OV" + newoverijsselScore); var utrechtObj = resourceManager.GetObject("UT" + newutrechtScore); var zeelandObj = resourceManager.GetObject("ZL" + newzeelandScore); var zuidhObj = resourceManager.GetObject("ZH" + newzuidHollandScore); if (zijde == "rechts") { RechterKaart(drentheObj, flevolandObj, frieslandObj, gelderlandObj, groningenObj, limburgObj, noordbObj, noordhObj, overijsselObj, utrechtObj, zeelandObj, zuidhObj); } else if (zijde == "links") { LinkerKaart(drentheObj, flevolandObj, frieslandObj, gelderlandObj, groningenObj, limburgObj, noordbObj, noordhObj, overijsselObj, utrechtObj, zeelandObj, zuidhObj); } }